Socket连接的小知识,和一个疑难杂症
生活随笔
收集整理的這篇文章主要介紹了
Socket连接的小知识,和一个疑难杂症
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我這篇文章說一個Socket的小技巧,另外咨詢一個問題
這些天重點攻打Socket
以前總覺得Socket編程應該比較容易,也做過簡單的Socket程序。
但真正要應用時,發現有很大問題!
我用C#語言
我這個程序用到的Socket也不算多。大概50個Socket客戶端連接到internet上不同服務器上,用的是TCP協議。數據傳輸內容是一些瑣碎的包,總共用到網絡帶寬大概512bps。
問題產生在數據延遲上了,程序對數據包的延遲要求很高,要求延遲平穩不跳動。程序每發送一個請求后,到從服務器接受到的反饋數據時間差要求基本一致。此外,程序還不停接受從服務器發送來的一些信息。
當開啟幾個Socket的時候,效果非常好,實時性很高,延遲穩定
但開到40個Socket的時候(每個socket連接不同服務器),就完全不一樣了。發送請求后,接收到服務器響應的數據包的時間差距很大。從100ms~10000ms不等。這對于我的程序完全是個災難!!!
在查詢很多資料后,終于知道微軟有個nagle算法。為了有效利用帶寬,nagle算法會使得Socket發送短數據包盡量合并發送,就產生一個延遲。
使用socket.SetSocketOption(SocketOptionLevel.TCP,SocketOptionName.NoDelay,1)可以關閉nagle算法。這樣發出的數據包就立刻出發了!~~ :)
程序性能終于有所改善,但還是有問題
數據包延遲從原來的100ms~10000ms變為100ms~2000ms了。這個延遲對我仍然是災難。而ping的時間是比較穩定的40~60ms
這個就是我要向大家咨詢的問題了
我也做了個測試,幾臺電腦通過一個電腦共享Internet連接,然后在這幾臺電腦上分別運行我的程序。發現延遲與所有電腦總連接數沒有關系,只與當前電腦上連接數量有關。當前電腦連接越多,延遲越不穩定!!~~~如果當前電腦只有一個連接,其他電腦不管開多少連接都不會影響到這臺電腦上程序的穩定!!~~~
這是什么原因呢?應該如何解決呢?
謝謝大家
這些天重點攻打Socket
以前總覺得Socket編程應該比較容易,也做過簡單的Socket程序。
但真正要應用時,發現有很大問題!
我用C#語言
我這個程序用到的Socket也不算多。大概50個Socket客戶端連接到internet上不同服務器上,用的是TCP協議。數據傳輸內容是一些瑣碎的包,總共用到網絡帶寬大概512bps。
問題產生在數據延遲上了,程序對數據包的延遲要求很高,要求延遲平穩不跳動。程序每發送一個請求后,到從服務器接受到的反饋數據時間差要求基本一致。此外,程序還不停接受從服務器發送來的一些信息。
當開啟幾個Socket的時候,效果非常好,實時性很高,延遲穩定
但開到40個Socket的時候(每個socket連接不同服務器),就完全不一樣了。發送請求后,接收到服務器響應的數據包的時間差距很大。從100ms~10000ms不等。這對于我的程序完全是個災難!!!
在查詢很多資料后,終于知道微軟有個nagle算法。為了有效利用帶寬,nagle算法會使得Socket發送短數據包盡量合并發送,就產生一個延遲。
使用socket.SetSocketOption(SocketOptionLevel.TCP,SocketOptionName.NoDelay,1)可以關閉nagle算法。這樣發出的數據包就立刻出發了!~~ :)
程序性能終于有所改善,但還是有問題
數據包延遲從原來的100ms~10000ms變為100ms~2000ms了。這個延遲對我仍然是災難。而ping的時間是比較穩定的40~60ms
這個就是我要向大家咨詢的問題了
我也做了個測試,幾臺電腦通過一個電腦共享Internet連接,然后在這幾臺電腦上分別運行我的程序。發現延遲與所有電腦總連接數沒有關系,只與當前電腦上連接數量有關。當前電腦連接越多,延遲越不穩定!!~~~如果當前電腦只有一個連接,其他電腦不管開多少連接都不會影響到這臺電腦上程序的穩定!!~~~
這是什么原因呢?應該如何解決呢?
謝謝大家
轉載于:https://www.cnblogs.com/foreverpk/archive/2006/05/07/393129.html
總結
以上是生活随笔為你收集整理的Socket连接的小知识,和一个疑难杂症的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真正的取真实IP地址及利弊Asp.net
- 下一篇: 写Blog的好处