Tag: socket.io redis

socket.io获取连接的客户端数量的所有房间

我现在使用socket.io与多个节点,因此我开始使用socket.io-redis适配器( https://github.com/socketio/socket.io-redis )来帮助我在节点之间进行同步。 我想获得服务器上所有房间的列表以及每个房间中相应数量的客户端。 在任何时候,我可能有数以千计的房间,并希望快速计数每个房间。 要获得我要做的所有房间的清单: io.of('/').adapter.allRooms((err, rooms) => { console.log(rooms); // an array containing all rooms (accross every node) }); 这将返回所有房间的列表,但是现在我不确定每个用户有多less个连接。 然后,我可以运行下一个查询来分别计算每个房间的数量: //query the first room, second room and so on… io.in('firstroom').clients((err, clients) => { console.log(clients); // an array containing socket ids in 'room3'. Aggregate them to get the count }); 这似乎是非常低效的,因为我会打这么多的电话来单独计数。 有没有一个比这更有效的方法来获得所有的房间与相关的连接数清单? 我已经研究过修改适配器代码,但是我并没有真正理解代码以做出任何改变。

如何在多个服务器上使用socket.io-redis?

我有两台机器上的以下代码 var server = require('http').createServer(app); io = require('socket.io')(server); var redisAdapter = require('socket.io-redis'); io.adapter(redisAdaptebr({host: config.redis.host, port: config.redis.port})); server.listen(config.port, function () { 我存储连接到这两台机器上的每个客户端的socket.id中央数据库,套接字的ID被保存,同一台服务器上的事件发送完美地工作,但是当我试图发送消息到其他服务器的套接字它不工作.. subSocket = io.sockets.connected[userSocketID]; subSocket.emit('hello',{a:'b'}) 我怎么知道redis是好的。 如何发送消息到另一台服务器上连接的套接字。

Laravel echo,socket.io和laravel-echo-server将不起作用

这可能是我遇到的最令人沮丧的事情,不幸的是,这可能是我做的一些愚蠢的事情。 以下是我正在使用的三件事的链接: Laravel回声设置 Socket.io(cdn) Laravel Echo服务器 这是我的问题:我的网站不断地击中这条路线: http://192.168.10.10:6001/socket.io : http://192.168.10.10:6001/socket.io : http://192.168.10.10:6001/socket.io 。 我不知道它为什么会碰到这个路由,因为我没有在我的代码中的任何地方定义socket.io部分。 这里是我在我的bootstrap.js中用来实例化Laravel Echo的代码。 import Echo from "laravel-echo" window.Echo = new Echo({ broadcaster: 'socket.io', host: 'http://192.168.10.10:6001' }); 这是我的socket.js文件(node.js)中的代码: var echo = require('laravel-echo-server'); var options = { authHost: 'http://192.168.10.10', authPath: '/broadcasting/auth', host: 'http://192.168.10.10', port: 6001 }; echo.run(options); 到目前为止,这里没有任何事情可能会出错。 这是链接回cdn的错误消息。 奇怪的是,改变window.Echo主机更改域,但我不知道如何更改该socket.io部分。 这让你想知道,是否在Socket.io文件的某个地方被硬编码? 这是我第一次使用Socket.io,所以我无法知道。 也许在我放入cdn之后,我需要做额外的设置? 所有的Laravel文档都要求添加脚本标签,而Laravel则因为拥有出色的文档而闻名。 […]

使用redis以socket.io水平缩放express / node.js

我正在试图通过后端快速扩展。 问题是,每当用户进来或如果我重新启动服务器,它会得到一个新的socket.id。 另外我不能保存整个套接字到内存中,因为它给我一个[圆形JSON]的问题。 如何将套接字的某个部分保存到redis中,以便从其他服务器检索相同的套接字?

redis-server脱机崩溃节点

我在这里有一段时间。 我已经阅读了大量的文档和其他民族关于同一主题的问题,无法find如何阻止这种情况发生的答案。 我有意closuresredis服务器,以确保应用程序在生产中不会完全走向核心,但是我所做的任何事似乎都阻止了这种情况的发生。 这里是我的代码现在是一个非常简单的例子… var cluster = require('cluster'); var express = require('express'); var http = require('http'); var redis = require('redis'); var redisAdapter = require('socket.io-redis'); var sticky = require('sticky-session'); var port = process.env.PORT || 3333; var workers = 3; var app = express(); var server = http.createServer(app); var io = require('socket.io')(server); if(!sticky.listen(server, 3333, {workers: workers})) { […]

socket.io-redis在redis 3.0.6中得到了尾随字节错误

我正在使用phpredis通过pubsub方法将数据发送到phpredis 将node.js升级到稳定版本4.2之后,我得到了来自socket.io-redis模块的trailing byte错误。 的node.js var pub = redis.createClient(2222, '127.0.0.1',{no_ready_check: true}) pub.auth(redisPassword); var allsub = redis.createClient(2222, '127.0.0.1',{return_buffers: true,no_ready_check: true}) allsub.auth(redisPassword); allsub.subscribe('somekey'); io.adapter(RedisStore({pubClient:pub,subClient:allsub})); 错误: Error: 256 trailing bytes at Object.decode (/usr/apps/js/node_modules/msgpack-js/msgpack.js:200:47) at Redis.onmessage (/usr/apps/js/node_modules/socket.io-redis/index.js:93:24) at emitTwo (events.js:92:20) at RedisClient.emit (events.js:172:7) at RedisClient.return_reply (/usr/apps/js/node_modules/redis/index.js:697:22) at ReplyParser.<anonymous> (/usr/apps/js/node_modules/redis/index.js:324:14) at emitOne (events.js:77:13) at ReplyParser.emit (events.js:169:7) at ReplyParser.send_reply (/usr/apps/js/node_modules/redis/lib/parser/javascript.js:302:10) at ReplyParser.execute […]

套接字IO性能成本比较房间和事件

在我的应用程序中,我正在使用redis适配器socket.io 我有场景,我必须创builddynamic聊天两人之间的聊天室 但是我已经有了他们用户的房间 现在,当我创build聊天室并单独发布事件时,是否有性能优势? 或当我发布多个活动userId房间? 哪一个更好。? 有什么性能基准testing工具可以给我们关于CPU负载和networking负载的细节 我知道的http://drewww.github.io/socket.io-benchmarking/和https://github.com/M6Web/websocket-bench但这些没有帮助的CPU负载和内存的负载 请在这里指导我

如何使用socket.io-redis获取所有连接的套接字?

我有我的多个节点通过socket.io-redis运行,一切都工作正常,因为我从另一个事件发送到1服务器。 我想要在多个服务器上获得连接套接字的完整列表,因为我必须相应地操作它们的键,就像在简单的socket.io的io对象中一样,我得到一个包含所有套接字的hashmap。

用socket.io-redis和RedisToGo在Heroku上扩展到2+ dynos

我正在尝试使用socket.io-redis来将我的Heroku应用程序扩展到2个dynos(或更多)。 这里是我的代码(config.redis只是一个包含RedisToGo端口,主机和传递值的对象): var redisApp = require('redis'); var redis = require('socket.io-redis'); if(process.env.NODE_ENV === 'production') { var socketpub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true}); var socketsub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, detect_buffers: true}); var client = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true}); socketio.adapter(redis({ pubClient: socketpub, subClient: socketsub, redisClient: client })); } 在客户端我有: var ioSocket = io('', […]

Socket.IO – 如何将事件发送给房间中的每个人,包括发件人?

在我的Socket.Io / Node.Js / Express应用程序中 – 在添加聊天室之前,我曾经为每个人(包括发件人)发出这样的事件: io.emit('chat message', msg); 现在我添加了房间,并尝试使用相同的东西 socket.broadcast.to(socket.room).emit('chat message', msg); 要么 socket.to(socket.room).emit('chat message', msg); 但是两者都只将消息发送给接收者, 而不发送给发送者。 我该怎么做才能让这个消息也发送给在聊天室里的发件人呢? 谢谢!