我试图了解如何最好地设计基于IIS / ASP.NET的websocket应用程序,特别是关于并发限制。
我已经阅读了有关IIS / ASP.NET的所有关于"并发Websocket连接的文献"以及如何调整各种值 - 但是,当谈到websockets时,"并发"?的定义是什么? 如果我打开了一个websocket并且它处于空闲状态,那就是"使用"一个连接?空闲的websockets是否计入连接使用总数,或仅在发送/接收消息时计算?
我希望在任何时候都能打开一个非常高(100个)的网页数量,但是会发送很少的消息,可能每分钟几个,它们将始终是服务器>客户端(和到一个特定的客户,而不是广播)。这种安排是否应该引导我进入任何特定的实施路线?
似乎SignalR集线器可能有点过分,我不需要为不支持websockets的客户端提供回退,我只需要维护每个客户端连接的句柄,这样当我的系统"决定" 34;要向特定客户端发送消息,它可以适当地路由它。
我引用的文档:
由于
答案 0 :(得分:12)
然而,在谈到websockets时,定义是什么 “同时”?如果我打开了一个websocket并且它闲置着,那就是 “使用”连接?空闲的websockets是否计入连接 使用总数,或仅在消息出现时计算 发送/接收的?
是的,如果您的服务器支持,那么闲置的开放连接不会消耗超出TCP保持活动的资源,也可能消耗协议和/或应用程序级ping / pongs。更重要的是,由于Websockets是面向连接的,你可能也持有与连接相关的一些状态(用户对象,用户数据等......)
我希望有一个非常高(数百个)的websockets 任何时候都打开,但是发送的消息很少, 也许每分钟几个,他们将永远是服务器 - >客户端(和 到一个特定的客户,而不是广播)。是/应该这样做 安排引导我走下任何特定的实施路线?
是的,对于不使用SignalR的路线:SignalR Scale-out (check the limitations section)。直接使用WebSockets并使用允许智能路由的框架(例如RabbitMQ)实现您自己的消息传递后端。您不希望使用基本上对所有节点进行“扇出”的背板,特别是如果数据是按用户进行的。
SignalR是一个polyfill,一个瞬态框架,直到广泛支持WebSockets ... and that already happened。还忘了提到从Windows Server 2012开始提供WebSockets:)