缩放Socket.IO并向所有归属客户端广播

时间:2012-01-31 05:40:10

标签: node.js redis scalability socket.io

我正在使用

  

使用“connect-redis”会话商店快递

I tied it with Socket.IO through configuring "authorization"

所以我不必实际使用

socket.get

或者

socket.set

存储和检索客户的所有变量。

但我不确定如果我向特定人群广播消息,连接到不同的服务器,请成功获取消息。

这样它真的可以缩放!

但它似乎不是真正缩放,而是仅使用Redis作为单独存储值。

另外I tried to use

  

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扩展到所有可用的缩放客户端?

编辑:我跟着the Express-Session-Socket.IO tutorial,我发现了       io.authorization实际上会产生问题,但如果没有 io.authorization ,它就好了。       那怎么样?

1 个答案:

答案 0 :(得分:2)

Socket.IO拥有自己的授权。它授权每个套接字。要自定义socket.IO Auth,使用我的代码,在io.configure函数内写入:

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

使用我的示例RedisStore,您可以扩展到所有可用的bradcasting客户端。