首页 文章

SignalR / Websockets连接限制和最佳实践

提问于
浏览
14

我试图了解如何最好地设计基于IIS / ASP.NET的websocket应用程序,特别是关于并发限制 .

我已经阅读了有关“并发Websocket连接”的IIS / ASP.NET的所有文献以及如何调整各种值 - 但是,在谈到websockets时,“并发”的定义是什么?如果我打开了一个websocket并且它处于空闲状态,那是“使用”连接吗?空闲的websockets是否计入连接使用总数,或仅在发送/接收消息时计算?

我希望在任何时候都能打开一个非常高(100个)的网页数量,但是会发送很少的消息,也许每分钟几个,它们将永远是服务器 - >客户端(并且一个,特定的客户,而不是广播) . 这种安排是否/应该引导我进入任何特定的实施路线?

似乎SignalR集线器可能过度,我不需要不支持websockets的客户端的后备,我只需要维护每个客户端连接的句柄,这样当我的系统“决定”向特定客户端发送消息时,它可以适当地路由它 .

我正在引用的文档:

谢谢

1 回答

  • 12

    然而,在谈到websockets时,“并发”的定义是什么?如果我打开了一个websocket并且它处于空闲状态,那是“使用”连接吗?空闲的websockets是否计入连接使用总数,或仅在发送/接收消息时计算?

    是的,闲置的开放连接不会消耗超出TCP保持活动的资源,也可能是协议和/或应用程序级ping / pongs,如果您的服务器支持它们 . 更重要的是,由于Websockets是面向连接的,你可能也持有一些与连接相关的状态(用户对象,用户数据等......)

    我希望在任何时候都能打开一个非常高(100个)的网页数量,但是发送的消息很少,可能每分钟几个,它们将始终是服务器 - >客户端(和单个,特定客户,而非广播) . 这种安排是否/应该引导我进入任何特定的实施路线?

    是的,对于不使用SignalR的路线:SignalR Scale-out (check the limitations section) . 直接使用WebSockets并使用允许智能路由的框架(例如RabbitMQ)实现您自己的消息传递后端 . 您不希望使用基本上对所有节点执行"fan-out"的背板,尤其是如果数据是每个用户的话 .

    SignalR是一个polyfill,一个瞬态框架,直到当天广泛支持WebSockets ... and that already happened . 还忘了提到从Windows Server 2012开始可以使用WebSockets :)

相关问题