.NET 4.5 服务器端 WebSocket 是不是使用 IOCP?

Posted

技术标签:

【中文标题】.NET 4.5 服务器端 WebSocket 是不是使用 IOCP?【英文标题】:Do .NET 4.5 Server-Side WebSockets use IOCP?.NET 4.5 服务器端 WebSocket 是否使用 IOCP? 【发布时间】:2013-04-19 13:30:35 【问题描述】:

有谁知道 AspNetWebSocket(在 .NET Framework 4.5 中引入)是否使用 IOCP 来处理请求,而不是每个连接一个线程?

【问题讨论】:

AspNetWebSocket 不是在客户端吗?所以不涉及 IOCP,只是常规任务。我想你的问题是关于服务器端的...... 【参考方案1】:

有一个相对简单的方法可以让您自己解决这个问题。

创建一个简单的程序。 用任务监视器观察它并查看线程数。 为其创建大量 Web 套接字连接。 查看线程数是否在连接处于活动状态时增加。 将连接数与线程数进行比较。

但是,有什么关系呢?只要 API 满足您的性能和可扩展性要求,您只能从应用程序的性能测试中发现。

请注意,如果实现不使用 IOCP,我会感到非常惊讶,但问恕我直言没有什么意义。

【讨论】:

这是一个答案吗?只有一条路可以检查,没有任何证据。 答案是“为什么重要”。恕我直言。 你是拉比还是耶稣会士?用另一个问题回答一个问题?请注意,它可能会触发 *** 中的堆栈溢出... ;) 要回答您的问题,恕我直言这非常重要,因为:1. 引入 websocket 支持时存在一些已确定的性能问题在 http.sys 中(适用于 Windows 8 和 2012) 2. 我们没有任何证据或反馈表明 websockets(通常)可以很好地扩展(即使在 node.js IOCP 世界中) 3. 这可能会花费您的公司很多钱如果您的应用程序最初要求较低(“上市时间”占主导地位!),但后来无法扩展...... 在这种情况下,重要的是“当以我打算在我的程序中使用它的方式使用时它是否可以扩展”而不是“它是否使用 IOCP”......我可以请你参考我的以前的评论... 如果 .Net WebSocket 服务器实现不使用 IOCP,则每个连接将有一个线程,并且您的服务器最终肯定无法扩展。在这种情况下,IOCP 是缩放的同义词。这就是为什么它很重要。从我的角度来看,如果实现不使用 IOCP,我不会感到惊讶:在 HTTP 模式下,它使用 http.sys 内核模式服务器,在 RESTful 模式下,但在 WebSocket 模式下切换到双工通信。在这种模式下,您不再依赖 http.sys 及其 IOCP 模式,而是使用自己的线程进行通信。我不确定你是否可以在这里使用任务。

以上是关于.NET 4.5 服务器端 WebSocket 是不是使用 IOCP?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ssl 的 ASP.net 4.5 Websocket 加密

限制 ASP.NET 4.5 中 WebSocket 的性能因素?

传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接

.Net 4.5 Websocket 推送技术?

在 .Net 4.5 中使用 Websocket 的示例 [关闭]

SuperWebSocket实现服务端和WebSocket4Net实现客户端