我做tcp服務器,本地測驗的時候8,9k并發沒問題,1個連接 間隔10秒發個資料包,服務端做決議。
但放到服務器上,到4000左右就不行,客戶端的包發不過去,一直發tcp retransmission。
一些引數像打開檔案數什么都設了,windows,linux 都試了不行(服務器配置也比本地機器好),路由器基本也排除了。
客戶端發包發不過去的時候,網路沒什么問題,ping什么的很正常 ,
求指點
uj5u.com熱心網友回復:
看看服務器上處理包的時間跟本地的對比。uj5u.com熱心網友回復:
這種原因,是網路發生了擁擠,導致資料包的丟失,所以才會不斷重發,本地測驗的帶寬比較好,足以承受8、9K的連接,你每次發送多大的資料包?uj5u.com熱心網友回復:
你先檢查一下你服務器收資料有沒有問題?原因: 局域網和廣域網是有很大區別的,在局域網內,通常一個包能收完的資料包,在廣域網上,可能會需要收好幾次,這極有可能會導致你服務器資料收取部分出例外,最侄訓連累TCP協議堆疊幫你背鍋(因為協議堆疊如果發現緩沖區中資料沒有被上層應用取走,那么它就會丟棄剩下的所收到的包,那么客戶端就會拼命的不斷retransmission).
檢查一下是否是帶寬夠?
如果不是上面的原因(請仔細檢查,大部分的例外都是上面的錯誤引起的),那就要看看是否是你的出口帶寬(客戶端方面)或者入口帶寬(服務器方面)是否達到或者接近接入速率
自己搭建模擬網路,來幫助測驗問題
如果還是沒能檢查出問題,那么請自己搭建一個模擬網路來幫助你發現問題。中間可以假設兩三層路由,然后把你的客戶端放在最后一層路由之下的局域網中,把你的服務器部署在頂層路由上,這樣可以最大程度的模擬廣域網環境,合適的情況下,還應該加上限速什么的來模擬真實環境。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/132502.html
標籤:網絡編程
上一篇:關于MFC寫的貪吃蛇的問題
