在寫tcp應用的時候一般都通過accept來接入連線的接入,但對於socket來說這個accept同時能處理多大的量一般都沒有明確說明,在應用中主要根據自己的需要設定listen的佇列數量.那listen(1000)是不是就能說明同時刻1000個連線進來都能被accept到呢?通過測試的結果來看windows下是不能的....linux下則可以.
通過ab開啟500個使用者壓相應的程式,c#,win c++都會導致ab出現apr_socket_recv: connection refused (111).但linux c++這**是完全正常,ab所有請求的連線都通過被linux c++接入.
以上程式上所有listen都是1000, 按理500個使用者同時接入不應該存在被拒絕的情況,因為請求的連線數並沒達佇列溢位的情況.但測試的結果很明確地說明的問題所在,winsocket下無法同時接入這個量的連線,其實在測試過程250個使用者同時接入winsocket就存在拒絕接入的情況,當然服務是不會有影響只是有些連線無法被接入.
總結通過測試可以確認是winsocket的限制,windows則沒有因為iis是可以抵抗這麼多使用者同時接入的.其實對於普通服務來說同時200個使用者接入已經是乙個不小的量了,因為持續這個量的處理每秒接入量可以達到1-2w.但感覺奇怪的是為什麼listen(1000)在winsocket下沒有起到作用呢?找了很多資料都沒找到具體原因,如果有熟悉winsocket還有其他引數設定的話希望能分享一下...
全量資料接入 設計方案
全量資料接入的過程本質上是資料集群件複雜的事件同步與時間相應的過程,涉及到觸發 反饋 反饋狀態檢查 分批等。因此,需要有乙個事件控制項作為基礎。一 事件控制項 1.1 使用zk同步資料 zk路徑規劃 info 說明 info可用於傳遞資訊,由指令碼自行解析 1.2 行為定義 1 觸發事件 trigg...
Semaphore 訊號量 允許多個執行緒同時訪問
synchronized 和 reentrantlock 都是一次只允許乙個執行緒訪問某個資源,semaphore 訊號量 可以指定多個執行緒同時訪問某個資源。示例 如下 author snailclimb date 2018年9月30日 description 需要一次性拿乙個許可的情況 publ...
乙個WinSocket的程式設計例項
server include include include define default port 5050 服務端預設埠 int main slisten socket af inet,sock stream,0 建立伺服器端套介面 if slisten invalid socket 以下建立伺...