在.NET的多连接环境中接受套接字的正确方式是什么?即使负载很高,以下内容就足够了吗?
while (true)
{
//block untill socket accepted
var socket = tcpListener.AcceptSocket();
DoStuff(socket) //e.g. spawn thread and read data
}也就是说,我是否可以在单个线程中接受套接字,然后在线程/数据流/其他任何地方处理套接字。所以问题只是关于接受部分..
发布于 2011-04-18 19:06:48
由于我使用的是异步CTP和DataFlow,所以当前的代码如下所示:
private async void WaitForSockets()
{
var socket = await tcpListener.AcceptSocketAsync();
WaitForSockets();
incomingSockets.Post(socket);
}请注意,看起来像是递归调用的调用不会导致堆栈溢出或阻塞。它将简单地启动一个新的等待器,等待新的套接字并退出。
发布于 2011-04-17 22:43:39
您可能希望使用BeginAccept异步操作,而不是同步接受。
如果你想处理高负载,你肯定不希望每个连接都有一个线程--再一次,你需要异步方法。
发布于 2011-04-17 22:50:06
看一下Reactor或Proactor模式,这取决于您是否想要阻塞。我推荐Patterns for Concurrent and Networked Objects book。
https://stackoverflow.com/questions/5694123
复制相似问题