【发布时间】:2012-02-22 21:38:14
【问题描述】:
我正在使用
使用“connect-redis”会话存储表达
还有I tied it with Socket.IO through configuring "authorization"
这样我就不必实际使用
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?
编辑:我关注了the Express-Session-Socket.IO tutorial,我发现 io.authorization 确实有问题,但没有 io.authorization 也可以ok。 怎么样?
【问题讨论】:
-
您能否说明您要广播的特定用户组?例如,这些用户是在同一个频道(socket.join())还是连接到同一个 url(即 /chat/1 或 /chat/2)的用户?
-
@mtsr 所有用户在同一命名空间或同一频道但在不同的服务器(缩放)
-
命名空间可以通过简单地将这些用户路由到同一台服务器来完成。使用频道会更困难,因为频道是在建立连接后加入的。
-
@mstr 除了频道,我认为难点在于让 socket.io 服务器向所有位于不同服务器但在同一命名空间中的所属人员广播。我该怎么做?
-
@InspiredJW 奇怪的是我的 RedisStore 版本不适合你。您使用的是哪个版本的 Socket.io?我用 0.8.7 写了这个例子
标签: node.js redis scalability socket.io