首页 文章

ASP.NET 池上的 Websocket 行为回收

提问于
浏览
4

我目前正在评估使用 asp.net websockets 连接数千个客户端,这些客户端几乎全天候保持与应用程序的连接,除非服务器脱机进行修补等。一般来说,系统的期望是 websockets 不应该不必要地断开连接并且客户端基本上保持连接并且每隔几分钟 ping 一次服务器。

当我正在为我们的新架构研究 asp.net websocket 可行性时,我遇到了另一个 stackoverflow 帖子:当存在打开的 ASP.NET 4.5 Websocket 时,IIS 应用程序池无法回收这似乎暗示如果存在活动的 websocket 连接,IIS 不会回收池。这是设计还是其他人遇到异常?如果 IIS 确实在 websocket 连接处于活动状态时回收池,那么预期的行为是什么? Http.sys 是否保持连接,回收池并恢复事情,就像没有发生任何事情一样(从客户的角度来看)?我应该为 websockets 创建一个单独的应用程序池并禁用它上面的回收吗?

1 回答

  • 0

    根据我的经验,旧工作进程上的 WebSockets 没有转换到新的工作进程。我观察到旧的 WebSockets 被置于一个 non-Open 状态,由你的代码检查并停止维护这些线程 - 我的应用程序通过 WebSockets 为客户端创建心跳,如果心跳失败,我需要关闭(已经关闭)WebSocket 上下文尽快,因此旧的工作进程可以完全卸载并死掉。

相关问题