我目前正在评估使用asp.net websockets来连接数千个客户端,这些客户端几乎全天候都会与应用程序保持连接,除非服务器脱机以进行修补等。通常,系统的期望是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创建一个单独的应用程序池并禁用它的回收吗?
答案 0 :(得分:0)
根据我的经验,旧工作进程上的WebSockets没有转换到新的工作进程。我观察到旧的WebSockets被置于非Open状态,由你的代码检查并停止维护这些线程 - 我的应用程序通过WebSockets为客户端创建心跳,如果心跳失败,我需要尽快关闭(已经关闭)WebSocket上下文,以便旧的工作进程可以完全卸载并死掉。