缩放Socket.IO并向所有归属客户端广播
我在用着
用“connect-redis”会话存储表示
而我通过configuration“授权”与Socket.IO绑定
所以我不必实际使用
socket.get
要么
socket.set
存储和检索客户的归属variables。
但是我不确定,如果我把消息广播给特定的一群人,连接到不同的服务器上,就可以成功地获得消息。
所以这是真正的缩放!
但它似乎并没有真正的缩放,但只使用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 没关系 。 那个怎么样?
Socket.IO有他自己的授权。 它授权每个套接字。 要使用我的代码自定义socket.IO Auth,请在io.configure
函数中写入:
io.set('authorization', function (handshakeData, callback) { //your auth logic });
通过我的RedisStore示例,您可以扩展到所有可用的bradcasting客户端。