我使用nodejs和socket.io在我的业务应用程序上发送聊天,但我想分发部署,这样我就可以拥有尽可能多的聊天服务器来平衡流量负载。
我尝试了来自nginx的负载均衡方法,但这只是平衡了流量,但socket.io之间的通信服务不一样,所以从用户A发送到服务器S1的一条聊天消息不会传到用户B上服务器S2。
有任何工具或方法可以做到这一点。
提前致谢。
=====编辑=====
以下是该应用的架构。
PHP CodeIgniter上的主应用程序前端允许将其标记为PHPCI NodeJs和SocketIO上的聊天应用程序后端允许将其标记为CHAT Redist上的聊天模型数据允许将其标记为REDIST
所以我现在拥有它的PHPCI - >聊天 - > REDIST。那工作得很好。
我需要的是分发应用程序,这样我可以拥有尽可能多的PHPCI或CHAT或REDIST,例如
PHPCI1 CHAT1
PHPCI2 -> -> REDIST1
PHPCI3 CHAT2
数字代表不同应用的实例。
因此,连接到PHPCI1的用户A可以向连接在PHPCI3上的用户B发送消息。
我认为CHAT中间的某个队列可以处理像rabbitmq这样的东西,它只能使用SocketIO将消息传递给客户端。
答案 0 :(得分:4)
如果您正在分发服务器负载(这是一项要求),我建议添加指定的聊天数据服务器(通常是内存数据库或消息队列)来处理聊天状态和跨边缘服务器的消息传递。
Redis Pub/Sub非常适用于此目的,甚至可以在低端机器上扩展至疯狂级别。正是这个用例Redis Cookbook有一个chapter。
答案 1 :(得分:-1)
如果您正确设置了聊天应用的服务器端,则不必分发socket.io。由于node.js是基于浏览器的,并且不需要任何客户端代码(除了从网页下载的资源),因此它会自动运行。使用网页,运行socket.io所需的文件会在正确包含时暂时下载到用户(就像使用jQuery一样)。如果您使用node.js和socket.io来制作Android应用程序,那么这些文件应该在您分发时包含在您的应用程序中,而不是单独包含在应用程序中。
此外,如果您希望使用两个单独的socket.io服务器,您应该能够通过以与客户端连接到服务器类似的方式连接它们来建立两者之间的通信,但是具有允许的特殊参数另一台服务器知道服务器已连接,它可以响应并为另一台服务器设置变量。