运行多个HTTP服务器实例进行扩展非常有用。
但是,似乎这不适用于WebSockets,因为每个服务器实例都有自己的客户端连接集。
如果所有人都需要共享一组公共连接,如何在多个服务器实例上运行WebSockets?
答案 0 :(得分:2)
我正在寻找同样的东西来开发可随时扩展的websocket应用程序,显然没有多少文章讨论过这个问题。
案例1 建议的方法是使用像Heroku建议的Redis缓存,使用Service Bus或像Scaleout in SignalR中提到的3种方法一样存储到db中。但是有一个问题,必须有轻微延迟,因为为了让第二个实例想知道,应该连续运行调度程序或后台工作者/服务来检测缓存中的新变化/队列/分贝强>
案例2 在我的情况下,我想高频率几乎实时。因此它应该在实例之间具有持久性连接。然而,挑战,我们不能在无状态Web服务器之间做到这一点。
所以我们仍然需要中间长时间运行的后台/工作服务,并从代码中实现我们自己的net / socket / TCP并维护连接池,但这不是一件容易的事。
我正在考虑在服务器上使用 Websocket客户端(对于此服务),因此与客户端和实例之间进行通信的模式几乎相同。请参阅:1 2。剩下的一件事就是将实例IP / URL更新到分布式缓存或每个实例上/下的db。
最后一个选项是探索新的WebRTC
答案 1 :(得分:1)
我还没有尝试过,但我想让连接变得粘稠可能会解决问题。您可以在负载均衡器中设置此设置。
答案 2 :(得分:0)
到目前为止,我找到的最佳解决方案是http://pusher.com/。
易于设置。很棒的文档。