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