0

我试图考虑是否可以从使用 BeginAccept 中获得任何可伸缩性优势,而不是仅仅阻塞在等待连接的专用线程中。显然,各个客户端将使用 BeginXXX/EndXXX 对来利用 IOCP 进行网络 IO,但我认为等待客户端连接的延迟应该非常低。我计划创建一个任务来处理传入的连接,这样我在接受完成后的后续代码不会阻塞主接受线程很长时间(足够长来创建一个任务对象),我可以马上回到阻塞状态在新的连接上。这几乎是我对 BeginAccept/EndAccept 所做的,只是没有管理异步调用的复杂性。

所以,我的问题是,通过使用 IOCP 接受,我可以获得哪些可扩展性优势(如果有的话)?请注意,这不是用于在单个客户端套接字上发送/接收,而只是用于接受服务器侦听套接字上的连接。

4

1 回答 1

4

如果您只有一个正在侦听的端口,那可能不值得 - 就像您一次只需要处理几个连接一样,您可能不会费心使用异步操作来处理这些连接。

异步的服务器端好处通常是当你扩大规模时——对于处理连接,当你获得大量连接时;因为BeginAccept当你在很多不同的端口上监听时。这可能比较少见,但是如果您确实想监听 100 个不同的端口(例如,如果您在一台服务器上托管大量网站,并且出于某种原因只想监听不同的端口而不是使用 Host 标头),那么您不需要想要 100 个线程只占用堆栈空间。

于 2013-03-01T20:21:29.487 回答