我參與了一個聊天的開發項目,我們正在使用node.js,socket.io(房間)和mongodb。我們正處於性能測試階段,我們非常擔心繫統是否需要負載均衡。聊天項目 - 使用socket.io負載平衡
如果我們的項目需要它,我們該如何開發? J'a關於NGINX的研究看起來很酷,但我們懷疑是否解決了我們的問題,因爲系統會如何聊天,我們擔心服務器不能正確地與對方說話......
我們在哪裏如果我們需要負載平衡,那就去吧?
我參與了一個聊天的開發項目,我們正在使用node.js,socket.io(房間)和mongodb。我們正處於性能測試階段,我們非常擔心繫統是否需要負載均衡。聊天項目 - 使用socket.io負載平衡
如果我們的項目需要它,我們該如何開發? J'a關於NGINX的研究看起來很酷,但我們懷疑是否解決了我們的問題,因爲系統會如何聊天,我們擔心服務器不能正確地與對方說話......
我們在哪裏如果我們需要負載平衡,那就去吧?
爲了確保我們可以擴展到多個節點,但保持不同客戶端和不同服務器之間的互連,我使用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
至於處理不同節點的服務器,也有不同的做法。
在其他...
查看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事件。
我如何使用AWS ELB? – Ren4n 2015-02-14 03:55:28
我需要做些什麼來配置redis服務器? – Ren4n 2015-02-14 04:29:57
爲了使用AWS ELB,您需要一個您正在託管服務器的AWS賬戶。您可以通過ELB將端口轉發到不同的服務器。它太酷了。就Redis配置而言,這非常容易設置。這幾乎是即插即用。將它放在與其他服務器防火的中央服務器上。 – 2015-02-14 21:50:03