首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java ServerSocket 選項完整指南:SO_TIMEOUT、SO_REUSEADDR、SO_RCVBUF 與效能偏好設定

     編輯:Java 相關知識

前言

ServerSocket 提供三大標準選項控制接受連接超時、端口重用、接收緩衝區大小,Java 5.0 新增效能偏好設定。本文詳細說明各選項的 API、行為差異、程式碼範例與實務建議。

一、SO_TIMEOUT - accept() 超時

  • setSoTimeout(int ms) / getSoTimeout()
  • 預設無限等待;設定後超時拋出 SocketTimeoutException。
  • 可在 bind() 前或後呼叫。
ServerSocket ss = new ServerSocket(1234);
ss.setSoTimeout(3000); // 3 秒無連接拋出例外

二、SO_REUSEADDR - 端口重用

  • setReuseAddress(true) / getReuseAddress()
  • 允許同一端口被多個 ServerSocket 綁定(需在 bind() 前設定)。
  • 首次綁定無需設定;後續綁定必須 true。
  • 多 ServerSocket 綁定同端口時,系統隨機選擇一個接收連接;該實例必須 close() 才輪到下一個。

三、SO_RCVBUF - 接收緩衝區大小

  • setReceiveBufferSize(int bytes) / getReceiveBufferSize()
  • 設定值將繼承給 accept() 回傳的每個 Socket(除非單獨覆寫)。
  • 超過 64KB 必須在 bind() 前設定。
  • 實務:即時遊戲調小提升靈敏度;大數據傳輸(HTTP/FTP)調大提升吞吐。

四、效能偏好設定

serverSocket.setPerformancePreferences(connectionTime, latency, bandwidth);

三參數相對重要性(0~任意整數),影響 JVM 底層 Socket 實作策略(如 Nagle 演算法、擁塞控制)。

結語

熟練掌握 ServerSocket 選項,能針對不同業務(高併發短連、大檔傳輸、即時互動)精準調校網路參數,提升伺服器穩定度與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved