c# - 池回收上的 ASP.NET Websocket 行为

标签 c# asp.net iis websocket

我目前正在评估使用 asp.net websockets 连接数千个客户端,这些客户端将几乎 24x7 保持与应用程序的连接,除非服务器因打补丁等而离线。通常,系统的期望是websockets 不应不必要地断开连接,客户端基本上会保持连接并每隔几分钟 ping 服务器一次。

当我在为我们的新架构研究 asp.net websocket 可行性时,我遇到了另一个 stackoverflow 帖子:IIS App Pool cannot recycle when there is an open ASP.NET 4.5 Websocket这似乎表明如果存在事件的 websocket 连接,IIS 不会回收池。这是设计使然还是其他人遇到了异常?如果 IIS 在 websocket 连接处于事件状态时确实回收了池,那么预期的行为是什么? Http.sys 是否保持连接、回收连接池并恢复正常(从客户端的角度来看)?我是否应该为 websockets 创建一个单独的应用程序池并禁用其回收?

最佳答案

根据我的经验,旧工作进程上的 WebSockets 不会转换到新工作进程。我观察到旧的 WebSockets 处于非打开状态,由您的代码检查并停止维护这些线程 - 我的应用程序正在通过 WebSockets 创建客户端的心跳,如果心跳失败我需要尽快关闭那个(已经关闭的)WebSocket 上下文,这样旧的工作进程就可以完全卸载并死掉。

关于c# - 池回收上的 ASP.NET Websocket 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33911234/

相关文章:

c# - 如何通过 Linq-to-XML 使用数据更新现有实体?

c# - RichTextBox 在有趣的地方找到我的搜索词

asp.net - Blazor 验证未修改的表单

iis - HTTP 错误 500.19 - IIS 和 MIME 类型在 windows10 中不起作用?

asp.net - 无法为网站禁用 SSL

c# - WPF ListView.ItemsSource 绑定(bind)问题

c# - 在 ASP.net MVC 3 Controller 的语句中添加 Select Top

c# - SelectedItem.Text 是否在 if 语句中工作?

c# - 锁定服务器场 (asp.net)

c# - 使用 javascript 获取 Windows 用户名