在扩展方面,运行多个HTTP服务器实例非常有用。
然而,似乎这在WebSockets上不起作用,因为每个服务器实例都会有自己的客户端连接集。
如果所有服务器实例都需要共享一个公共连接集,则如何在多个服务器实例上运行WebSockets?
在扩展方面,运行多个HTTP服务器实例非常有用。
然而,似乎这在WebSockets上不起作用,因为每个服务器实例都会有自己的客户端连接集。
如果所有服务器实例都需要共享一个公共连接集,则如何在多个服务器实例上运行WebSockets?
我正在寻找开发websocket应用程序的方法,以便随时扩展,但似乎没有太多文章讨论这个问题。
方案1 推荐的方法是使用Redis缓存,就像Heroku建议的那样,使用Service Bus或将其存储到数据库中,就像SignalR的Scaleout中提到的3种方法。然而,有一个问题,必须存在轻微的延迟,因为为了让第二个实例知道,调度程序或后台工作者/服务应该持续运行以检测缓存/队列/数据库中的新更改。
方案2 在我的情况下,我想要高频率几乎是实时的。因此,它应该在实例之间具有持久连接。但是挑战在于,我们无法在无状态的Web服务器之间进行连接。
因此,我们仍然需要中间长时间运行的后台/工作服务,并从代码实现自己的net/socket/TCP并维护连接池,但这不是一个容易的任务。
我考虑使用服务器上的Websocket客户端(用于此服务),因此与客户端和实例之间通信的模式几乎相同。请参见:1 2。剩下的一件事是在每个实例的启动/关闭时将实例IP / URL更新到分布式缓存或数据库中。
最后一个选择是探索新的WebRTC。