作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] 请教一个 TcpListener 问题
时间Wed May 30 23:51:45 2007
※ 引述《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)