15

运行多个 HTTP 服务器实例以进行扩展很有用。

但是,这似乎不适用于 WebSockets,因为每个服务器实例都有自己的客户端连接集。

如果它们都需要共享一组公共连接,您如何在多个服务器实例上运行 WebSocket?

4

3 回答 3

2

我一直在寻找同样的东西来开发准备扩展的 websocket 应用程序,显然没有太多关于这个的文章讨论。

案例 1推荐的方法是像Heroku建议 的那样使用 Redis 缓存,使用 Service Bus 或像SignalR 中的 Scaleout 中提到的 3 种方法一样存储到 db中。但是有一个问题,必须有一点延迟,因为为了让第二个实例知道,调度程序或后台工作程序/服务应该连续运行以检测缓存/队列/数据库中的新更改。

案例 2 就我而言,我想要几乎实时的高频。所以它应该在实例之间有一个持久连接。然而挑战在于,我们不能在无状态 Web 服务器之间做到这一点。

因此,我们仍然需要中间长时间运行的后台/worker 服务,并从代码中实现我们自己的 net/socket/TCP 并维护连接池,但这并不是一件容易的事。

我正在考虑在服务器上使用 Websocket 客户端(用于此服务),因此与客户端和实例之间通信的模式几乎相同。见:1 2。剩下的一件事是将实例 IP/URL 更新到每个实例上/下的分布式缓存或数据库中。

最后一个选择是探索新的WebRTC

于 2013-11-24T11:46:20.223 回答
1

我还没有尝试过,但我正在考虑让连接变得粘稠可能会解决问题。您可以在负载均衡器中设置此设置。

于 2014-11-10T05:41:38.690 回答
-3

到目前为止,我发现的最佳解决方案是http://pusher.com/

易于设置。很棒的文档。

于 2013-11-24T18:17:05.353 回答