[點晴永久免費OA]服務(wù)器啟動的時候就一個對外的端口,如何同時連接多個客戶端?
當(dāng)前位置:點晴教程→點晴OA辦公管理信息系統(tǒng)
→『 經(jīng)驗分享&問題答疑 』
服務(wù)器通過一個對外端口同時連接多個客戶端是網(wǎng)絡(luò)通信的基本能力,核心依賴于TCP/UDP 協(xié)議的連接標(biāo)識機制和服務(wù)器的并發(fā)處理模型。以下是具體原理和實現(xiàn)方式: 一、核心原理:為什么一個端口能支持多個連接?TCP 協(xié)議中,一個 “連接” 通過四元組(源 IP、源端口、目標(biāo) IP、目標(biāo)端口)唯一標(biāo)識,而非僅靠目標(biāo)端口。
例:
二、服務(wù)器處理多客戶端的核心機制服務(wù)器通過 “監(jiān)聽套接字” 和 “連接套接字” 分離的方式實現(xiàn):
簡言之:一個監(jiān)聽套接字(綁定固定端口)負(fù)責(zé)接收新連接,N 個連接套接字(動態(tài)分配)負(fù)責(zé)與 N 個客戶端通信。 三、常見的并發(fā)處理模型(實現(xiàn)多客戶端連接)根據(jù)服務(wù)器的處理方式,主要有以下模型(以 TCP 為例): 1. 多進(jìn)程 / 多線程模型(簡單直接) 原理:每接受一個客戶端連接(accept),就創(chuàng)建一個新進(jìn)程或線程,專門處理該連接的讀寫邏輯,主進(jìn)程 / 線程繼續(xù)等待新連接。 適用場景:連接數(shù)較少(如幾百個),實現(xiàn)簡單,但進(jìn)程 / 線程創(chuàng)建銷毀開銷大,資源占用高。 2. I/O 多路復(fù)用模型(高并發(fā)常用) 原理:單進(jìn)程 / 線程通過select/poll/epoll(Linux)/kqueue(BSD)等系統(tǒng)調(diào)用,同時監(jiān)聽多個連接套接字的 I/O 事件(可讀 / 可寫),高效處理多連接。 核心優(yōu)勢:避免大量進(jìn)程 / 線程開銷,單線程可處理數(shù)萬甚至數(shù)十萬連接(取決于系統(tǒng)限制)。 適用場景:高并發(fā)場景(如 Web 服務(wù)器、即時通訊),Node.js、Nginx、Redis 等均采用類似模型。 3. 線程池 / 進(jìn)程池模型(平衡資源與效率) 原理:預(yù)先創(chuàng)建固定數(shù)量的線程 / 進(jìn)程(池),新連接到來時,從池中分配一個線程處理,避免頻繁創(chuàng)建銷毀的開銷。 適用場景:連接數(shù)中等(數(shù)千),資源可控,常見于 Java 的 Tomcat(默認(rèn) BIO 模型用線程池)。 四、關(guān)鍵限制(單端口能支持多少連接?)
客戶端連接時的源端口(客戶端本地端口)是由客戶端操作系統(tǒng)隨機分配的,與服務(wù)器無關(guān)。 源端口(客戶端本地端口):由客戶端操作系統(tǒng)隨機分配(從臨時端口池選未占用的),用于標(biāo)識客戶端的單個連接。 參考文章:原文鏈接? 該文章在 2025/11/1 16:09:29 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |