【发布时间】:2011-08-14 12:35:55
【问题描述】:
我一直在使用 msdn 上发布的以下代码:
http://msdn.microsoft.com/en-us/library/fx6588te.aspx
我了解服务器应用程序在等待新客户端时没有被阻止。
但是,这个应用程序(甚至套接字)可以处理多个并发请求吗?
如果客户端 A 和 B 同时连接会发生什么?
如果客户端 A 连接并且处理其请求需要 5 秒,如果客户端 B 稍后连接,它是否必须等待客户端 A 完成才能开始处理?
还是会同时处理客户端A和客户端B的请求?
我通过在套接字侦听器代码中的接收/发送数据之间放置 Thread.Sleep(n) 命令对此进行了一些测试。然后我可以向套接字发送多个请求,它们似乎已被处理。然而,套接字总是在 same 线程 id 上处理它们——这让我相信它实际上并没有同时发生。
特别是考虑到微软的描述,这个应用程序在等待新连接时根本不会阻塞 - 这是否意味着它 可以处理并发连接?
【问题讨论】:
-
实际上,该页面指出服务器应用程序的执行在等待来自客户端的连接时不会暂停,因为所有调用都是使用异步回调完成的,这意味着在等待连接或数据时,您的主线程不会被阻塞。但是是的,它可以在多个线程上同时接收数据,尽管对于单个传入连接只能激活一个“接受”回调(这意味着在接受连接时您必须快速完成工作)。
-
Hy RemotecUK,您能否发布更新后的代码以接受多个连接。我还使用了 MSDN 示例,需要多个连接来处理。请帮忙。
标签: c# .net sockets client-server tcp