聊天项目 - 使用 socket.io 进行负载平衡
Chat project - load balance with socket.io
我参与了一个聊天开发项目,我们使用 node.js、socket.io(房间)和 mongodb。我们正处于性能测试阶段,非常关心系统是否需要负载均衡。
如果我们的项目需要,我们如何开发? J'a 在 NGINX 上的研究看起来很酷,但我们怀疑是否解决了我们的问题,因为系统将如何聊天,我们担心服务器之间没有正确地~交谈~......
如果我们需要负载均衡,我们去哪里?
查看 NPM 包 mong.socket.io。它能够将 socket.io 数据保存到 mongoDB,如下所示;
{
"_id" : ObjectId("54b901332e2f73f5594c6267"),
"event" : "join",
"message" : {
"name" : "join",
"nodeId" : 426506139219,
"args" : "[\"URAiA6mO6VbCwquWKH0U\",\"/54b6821asdf66asdasd2f0f9cd2997413780273376\"]"
}}
或者您可以使用此处提到的 redis 适配器;
Socket.IO Using multiple nodes
然后只需使用 NGINX 反向代理,所有节点进程应该相互共享 Socket.IO 事件。
为了确保我们可以扩展到多个节点,同时保持不同客户端和不同服务器之间的互连,我使用了 redis。它的使用和设置实际上非常简单。
这样做是在您的服务器之间创建一个 pub/sub 系统来跟踪您不同的套接字客户端。
var io = require('socket.io')(3000),
redis = require('redis'),
redisAdapter = require('socket.io-redis'),
port = 6379,
host = '127.0.0.1',
pub = redis.createClient(port, host),
sub = redis.createClient(port, host, {detect_buffers: true}),
server = http(),
socketServer = io(server, {adapter: redisAdapter({pubClient: pub, subClient: sub})});
在此处阅读更多内容:socket.io-redis
就处理不同的节点服务器而言,有不同的方法。
- AWS ELB(弹性负载均衡器)
- Nginx
- 阿帕奇
- HAProxy
其中...
我参与了一个聊天开发项目,我们使用 node.js、socket.io(房间)和 mongodb。我们正处于性能测试阶段,非常关心系统是否需要负载均衡。
如果我们的项目需要,我们如何开发? J'a 在 NGINX 上的研究看起来很酷,但我们怀疑是否解决了我们的问题,因为系统将如何聊天,我们担心服务器之间没有正确地~交谈~......
如果我们需要负载均衡,我们去哪里?
查看 NPM 包 mong.socket.io。它能够将 socket.io 数据保存到 mongoDB,如下所示;
{
"_id" : ObjectId("54b901332e2f73f5594c6267"),
"event" : "join",
"message" : {
"name" : "join",
"nodeId" : 426506139219,
"args" : "[\"URAiA6mO6VbCwquWKH0U\",\"/54b6821asdf66asdasd2f0f9cd2997413780273376\"]"
}}
或者您可以使用此处提到的 redis 适配器;
Socket.IO Using multiple nodes
然后只需使用 NGINX 反向代理,所有节点进程应该相互共享 Socket.IO 事件。
为了确保我们可以扩展到多个节点,同时保持不同客户端和不同服务器之间的互连,我使用了 redis。它的使用和设置实际上非常简单。
这样做是在您的服务器之间创建一个 pub/sub 系统来跟踪您不同的套接字客户端。
var io = require('socket.io')(3000),
redis = require('redis'),
redisAdapter = require('socket.io-redis'),
port = 6379,
host = '127.0.0.1',
pub = redis.createClient(port, host),
sub = redis.createClient(port, host, {detect_buffers: true}),
server = http(),
socketServer = io(server, {adapter: redisAdapter({pubClient: pub, subClient: sub})});
在此处阅读更多内容:socket.io-redis
就处理不同的节点服务器而言,有不同的方法。
- AWS ELB(弹性负载均衡器)
- Nginx
- 阿帕奇
- HAProxy
其中...