Масштабируем Socket.IO и транслируем всем принадлежащим клиентам - PullRequest
2 голосов
/ 31 января 2012

Я использую

Экспресс с хранилищем сеансов "connect-redis"

И Я связал его с Socket.IO через настройку «авторизации»

Так что мне не нужно на самом деле использовать

socket.get

Или

socket.set

Для хранения и получения принадлежащих клиенту переменных.

Но я не уверен, что если я рассылаю сообщение определенной группе людей, подключенных к другому серверу, получаю сообщение успешно.

Так что это действительно масштабируется!

Но, похоже, он не по-настоящему масштабирован , а использует только Redis для хранения значений по отдельности.

Также Я пытался использовать

RedisStore

который задается как Socket.IO

не работает.

Это говорит

DEBUG: TypeError: Converting circular structure to JSON
    at Redis.stringify [as pack] (native)
    at Redis.publish (/var/www/node_modules/socket.io/lib/stores/redis.js:106:31)
    at Manager.handleClient (/var/www/node_modules/socket.io/lib/manager.js:646:18)
    at Manager.handleHTTPRequest (/var/www/node_modules/socket.io/lib/manager.js:595:8)
    at Manager.handleRequest (/var/www/node_modules/socket.io/lib/manager.js:557:12)
    at HTTPServer.<anonymous> (/var/www/node_modules/socket.io/lib/manager.js:112:10)
    at HTTPServer.emit (events.js:70:17)
    at HTTPParser.onIncoming (http.js:1507:12)
    at HTTPParser.onHeadersComplete (http.js:102:31)
    at Socket.ondata (http.js:1403:22)

Как я могу масштабировать Socket.IO с широковещательной рассылкой для всех доступных масштабируемых клиентов?

Редактировать: Я следовал учебник Express-Session-Socket.IO и обнаружил, что io.authorization действительно создает проблему, но это хорошо без io.authorization . Как это?

1 Ответ

2 голосов
/ 03 февраля 2012

Socket.IO имеет свою авторизацию. Это разрешить для каждого сокета. Чтобы настроить socket.IO Auth, используя мой код, напишите внутри функции io.configure:

io.set('authorization', function (handshakeData, callback) {
       //your auth logic 
});

В моем примере RedisStore вы масштабируете до всех доступных клиентов bradcasting.

...