2015-02-08 6 views
11

Ich bin beteiligt an einem Entwicklungsprojekt eines Chats, wo wir node.js, socket.io (Räume) und mongodb verwenden. Wir befinden uns in der Phase der Leistungstests und wir sind sehr besorgt, wenn das System eine Lastverteilung benötigt.Chat Projekt - Lastenausgleich mit socket.io

Wie können wir entwickeln, wenn unser Projekt es braucht? J'a recherchiert auf NGINX sieht cool aus, aber wir sind unsicher, ob unser Problem löst, wie das System ein Chat sein wird, wir befürchten, dass die Server nicht miteinander reden ~

Wo sind wir Gehen wir, wenn wir einen Lastenausgleich benötigen?

Antwort

9

Um sicherzustellen, dass wir auf mehrere Knoten skalieren können, aber die Interkonnektivität zwischen verschiedenen Clients und verschiedenen Servern aufrechterhalten können, verwende ich redis. Es ist wirklich sehr einfach zu bedienen und einzurichten.

Was dies tut, erstellt ein Pub/Sub-System zwischen Ihren Servern, um Ihre verschiedenen Socket-Clients zu verfolgen.

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})}); 

lesen Sie hier mehr: socket.io-redis

Soweit die verschiedenen Knotenserver Handhabung gibt unterschiedliche Ansätze.

  • AWS ELB (Elastic Load Balancer)
  • Nginx
  • Apache
  • HAProxy

Unter anderem ...

+0

Wie kann ich AWS ELB benutzen? – Ren4n

+0

Was muss ich tun, um den Redis-Server zu konfigurieren? – Ren4n

+0

Um AWS ELB zu verwenden, benötigen Sie ein AWS-Konto, in dem Sie Ihre Server hosten. Sie können Ihre Ports über das ELB an die verschiedenen Server weiterleiten. Es ist ziemlich cool. Soweit Redis Konfiguration geht, ist das so einfach einzurichten. Es ist ziemlich Plug-and-Play. Haben Sie es auf einem zentralen Server, der mit Ihren anderen Servern verbunden ist. –

3

Überprüfen Sie das NPM-Paket mong.socket.io. Es hat die Fähigkeit, socket.io-Daten wie unten in mongoDB zu speichern;

{ 
    "_id" : ObjectId("54b901332e2f73f5594c6267"), 
    "event" : "join", 
    "message" : { 
      "name" : "join", 
      "nodeId" : 426506139219, 
      "args" : "[\"URAiA6mO6VbCwquWKH0U\",\"/54b6821asdf66asdasd2f0f9cd2997413780273376\"]" 
    }} 

Oder Sie können den Redis Adapter wie dort erwähnt verwenden;

Socket.IO Using multiple nodes

Dann benutzen Sie einfach die NGINX Reverse-Proxy und alle Knotenprozesse sollten Socket.IO Ereignisse miteinander teilen.