Re: [問題] 請教一個 TcpListener 問題
※ 引述《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)
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章