socket.io-redis 如何处理房间?

Posted

技术标签:

【中文标题】socket.io-redis 如何处理房间?【英文标题】:How does socket.io-redis deal with rooms? 【发布时间】:2016-07-21 22:00:18 【问题描述】:

如果我有多个进程并且正在使用 socket.io-redis,那么当我使用io.to(room).emit(namespace, message); 时,这是否可以无缝且高效地处理?还是我误解了socket.io-redis的作用?

【问题讨论】:

从他们所说的socket.io/docs/using-multiple-nodes/…(...(甚至是某个房间里的每个人)...)看来是这样的。找出答案的最好方法是测试! 【参考方案1】:

简而言之,据我所知这是-

io.to('room').emit('namespace', 'message');

意味着向'room'频道中的所有客户发送message,名为'namespace',值为'message',包括发件人.

详细信息(见here)-

 // send to current request socket client
 socket.emit('message', "this is a test");// Hasn't changed

 // sending to all clients, include sender
 io.sockets.emit('message', "this is a test"); // Old way, still compatible
 io.emit('message', 'this is a test');// New way, works only in 1.x

 // sending to all clients except sender
 socket.broadcast.emit('message', "this is a test");// Hasn't changed

 // sending to all clients in 'game' room(channel) except sender
 socket.broadcast.to('game').emit('message', 'nice game');// Hasn't changed

 // sending to all clients in 'game' room(channel), include sender
 io.sockets.in('game').emit('message', 'cool game');// Old way, DOES NOT WORK ANYMORE
 io.in('game').emit('message', 'cool game');// New way
 io.to('game').emit('message', 'cool game');// New way, "in" or "to" are the exact same: "And then simply use to or in (they are the same) when broadcasting or emitting:" from http://socket.io/docs/rooms-and-namespaces/

 // sending to individual socketid, socketid is like a room
 io.sockets.socket(socketid).emit('message', 'for your eyes only');// Old way, DOES NOT WORK ANYMORE
 socket.broadcast.to(socketid).emit('message', 'for your eyes only');// New way

更多内容请关注here


基本-

其实问题是你的问题太复杂了,其他人很难理解你到底需要什么。所以,我假设你也需要知道这背后的基本概念。所以我添加这部分也是为了你的好消息。

这里 socket.ioRedis 的概念是你应该管理与套接字的连接并将数据作为数据库存储在 redis 中。

Redis 通常用于在 DB(或缓存数据库)上应用层,以便可以将某些数据存储一段时间。所以在这期间,如果需要任何查询,数据将来自 Redis,而不是来自 DB 查询。

本系统申请performance tuning,让您的系统可以同时处理巨大的负载。

在您的情况下,您可以在短时间内缓存数据,以便通过 socket.io 发送消息。

更多可以在这里找到-

    http://notjoshmiller.com/socket-io-rooms-and-redis/

    http://goldfirestudios.com/blog/136/Horizontally-Scaling-Node.js-and-WebSockets-with-Redis

    https://github.com/socketio/socket.io-redis/issues/98

认为这个答案肯定会对你有所帮助。

【讨论】:

这是 socket.io 中房间的一般概念,但没有解决 socket.io-redis 模块的功能。 实际上,socket.io 和 redis 的概念是你应该管理与套接字的连接并将数据作为 DB 存储在 redis 中

以上是关于socket.io-redis 如何处理房间?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 socket.io-redis 发送私人消息(发射)

Bazel - 如何处理外部 .so 库的传递依赖关系?

如何处理包含离散和连续数据的数据集

kotlin 不确定如何处理插入方法的返回类型

离开页面时如何处理jQuery ajax发布错误

离开页面时如何处理jQuery ajax发布错误