我有一个用.Net 4.5,MVC 4编写的网站,使用SignalR 2.0.2和Redis背板进行负载平衡。这也有许多操作可以将json返回给应用程序。它设置为预加载和应用程序池设置为始终运行。使用AWS Redis ElastiCache在Windows 2012,IIS 8上托管。
我将连接ID保存到我的SQL数据库中,针对OnConnected上的用户,OnReconnected,并使用OnDisconnected清除,但这些都是try / catch以防万一。
我们有一个iOS应用程序,通过websockets连接。不幸的是,该应用程序并没有关闭它的连接,并且创建它们的频率超过了需要。
净效果是服务器可以有3000多个连接,但只有几百个是真正的连接。这本身并不是一个问题,将在下一个应用程序版本中修复。
问题是当代码更新或应用程序池回收(定期间隔)时CPU长时间最大化。我没有在我写过的任何其他网站上发生过这种情况,这是第一个有如此多连接的SignalR网站,所以我相信服务器正试图优雅地处理所有连接。
效果是整个网站不可用。显然,执行IISRESET会修复它。如果系统在1台服务器或2台上运行,则无关紧要。
因此,知道此版本的SignalR不支持从服务器端断开客户端...
如果需要更多信息,请询问。
长期读者,第一次海报。 感谢