- Java游戲服務器架構實戰
- 王廣帥編著
- 933字
- 2025-03-19 16:19:11
1.3.1 網絡通信長連接與短連接
網絡通信最基本的要求就是客戶端和服務器通過互聯網進行通信。網絡通信有兩種方式,一個是長連接,一個是短連接。長連接是指,客戶端與服務器一旦建立好連接之后,就維護這個連接,并保證這個連接不斷開。長連接的優點是客戶端每次發送請求都不用重新建立連接,有請求可以立即發送,從而節省消息發送的時間。而且長連接通信是雙向的,服務器也可以主動給客戶端發送消息,比如向其他客戶端轉發另一個客戶端發送的聊天消息,或主動告知客戶端一些數據狀態的變化。而長連接的缺點是會一直占用計算機資源(內存、文件句柄、網絡I/O)。
在Linux操作系統上,每一個長連接會占用一個Socket句柄,可以使用命令ulimit –n查看當前系統支持的最高Socket句柄數,不同系統的默認值不一樣,有的是1 024,有的是65 535。可以使用root身份,使用命令修改最高的Socket句柄數:ulimit –n 2048(將最高句柄數修改為2 048)。由于單臺服務器的資源是有限的,所以單臺服務器支持的客戶端長連接的數量也是有限的。
短連接是指客戶端與服務器建立好連接,一次請求返回之后,這個連接就會斷開,不需要維持連接。短連接的優點是連接斷開之后資源就會釋放,不再占用服務器資源,可以為更多的客戶端提供服務。短連接的缺點是每次請求都需要等待建立新的連接,請求發送會慢一些,HTTP就是常用的短連接協議之一。
在游戲服務器的開發中,這兩種方式是混合使用的,可相互彌補各自的不足,發揮各自的優點。如圖1.2所示,既有Web-Gate,又有Server-Gate。Web-Gate是Web服務器網關,用于接收所有的HTTP請求。在游戲服務中,客戶端的一些功能與服務器的交互頻率非常低,比如用戶注冊、登錄、公告等,所以沒有必要使用長連接。而且HTTP是通用的協議,有很多現成的成熟框架可以使用,可節省開發成本,比如Web服務器網關,負載均衡,消息轉發等。
而用戶進入游戲之后,在玩游戲的過程中會與服務器頻繁地交互數據,這個時候需要關注的就是消息響應速度了。速度越快,游戲越流暢,用戶體驗就越好。因此長連接是最好的選擇,進入游戲時,連接就建立好了,不用每次發送消息都建立新的連接,有請求可以立即發送,節省等待時間。
這里說的長連接是基于Socket封裝的TCP。它是一種安全可靠、有序的數據流協議,目前被很多游戲開發人員采用。另外一種UDP不在本書的討論范圍之內,有興趣的讀者可以自行學習。