Re: [問題] 請教一個 TcpListener 問題

看板C_Sharp (C#)作者 (躂躂..)時間18年前 (2007/05/30 23:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《kekul (每天都肚子餓)》之銘言: : 所以在 Client Side 這端設定 tcpclient.NoDelay = true; NoDelay和字面上的意思其實有點不同 :X NoDelay指的是是否要開啟 Nagle algorithm (在Linux上的BSD Socket也有這個用法, 而且預設是開啟) Nagle's algorithm 與 PCManX (中文) http://blog.linux.org.tw/~jserv/archives/001450.html Boost socket performance on Linux (英文) - 看 Tip 1 http://www-128.ibm.com/developerworks/linux/library/l-hisock.html 其實NoDelay是用來合並(concatenate)多個小buffer成一個單一TCP Segment 來提供效能 (因為要減少header所帶來的traffic overhead) 所以其實用了 NoDelay 反而會有Delay (up to 200ms) -- 然後我回說用 non-blocking 來做, 我想應該是有問題的:X 原本想說如果 non-blocking 的話, 不管有沒有資料都不會等待, 所以可以直接取得已收到的資料. 但我想問題應該不是在這裡.. 因為原本的socket和NetworkStream本來就已經是non-buffered.. 所以應該不會有等待的問題.. 問題可能是, 你除了用NetworkStream, 又另外使用其他的IOStream 來把資料導到 NetworkStream, 但這個 IOStream 是buffered, 那就有可能發生這個問題.. 如果是這樣的話, 就呼叫該 IOStream的 Flush() 來強制處裡IO.. 這種問題通常是發生在Write而不是Read.. 如果不是這樣的話, 來點code看看吧^^? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.142.169 ※ 編輯: cole945 來自: 220.139.142.169 (05/31 04:19)
文章代碼(AID): #16NPsIou (C_Sharp)
文章代碼(AID): #16NPsIou (C_Sharp)