fd也設置爲非阻塞,那麼單純靠epoll事件來驅動的服務器模型會存在問題,併發壓力下發現,每次accept只從系統中取得第一個,所以如果恰馮多個
連接同時觸發server
fd的EPOLLIN事件,在返回的event數組中體現不出來,會出現丟失事件的現象,所以當用ab等工具簡單的壓載就會發現每次都會有最後幾條信息得
不到處理,原因就在於此,我現在的解決辦法是將server fd的監聽去掉,用一個線程阻塞監聽,accept成功就處理檢測client
fd,然後在主線程循環監聽client事件,這樣epoll在邊緣模式下出錯的概率就小,測試表明效果明顯
以上爲網上的資料
//本人:1可以將fd設置爲阻塞,並採用LT模式,就可以了
2.可以在Accept時用循環接受鏈接