问题标签 [socket.io-redis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
866 浏览

node.js - 使用 socket.io-redis 和多个服务器/进程。如何通过回调向特定套接字 ID 发送消息?

我有多个进程和服务器,并且正在使用带有会话亲和性的 socket.io-redis(在 Heroku 上)。

当客户端连接时,我会在 Redis 中存储客户端用户 ID 到客户端套接字 ID 的映射。断开连接后,我从 Redis 中删除了客户端的用户 ID。

我希望能够通过查找客户端的套接字 ID 向客户端推送消息,然后将消息发送到特定的套接字 ID。

一种方法是io.to(socketId).emit(...). 但是,这不允许我发送带有消息的回调,我真的很想这样做,因为我想确认消息接收。

我发现的另一种方法是io.connected[socketId].emit(...). 这样做的问题是它不能扩展到多个服务器,因为io.connected每个服务器上的对象可能不一定相同,因为它只记录服务器本身连接到的套接字。但是,此解决方案确实允许回调。

有没有办法解决这个问题,以便我可以从任何服务器或进程向特定的套接字 ID 发出消息,并发送带有消息的回调?

0 投票
1 回答
1752 浏览

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

我正在使用 Node.js、Socket、io、Redis 开发一个实时应用程序。我尝试从工作人员向一位客户发送私人消息,但它不起作用。worker 上的数组io.sockets.connected为空,我无法引用客户端。

主代码:

工人代码:

我究竟做错了什么?

0 投票
1 回答
93 浏览

node.js - 如何将数据从客户端发送到唯一的套接字服务器

我知道如果我在套接字上发出数据,数据将被发送到所有连接的客户端。

io.emit("test", data)

例如,如果我运行上面的命令,实际上数据会到达所有客户端。但只有test频道监听器处理它。

为了防止这种情况,我使用房间。我使用如下代码:

io.in("test").emit(data)

那么,如果一个客户端向服务器发送数据,那么数据是否会到达所有客户端呢?

注意:我也socket.io-redis用来制作集群。

0 投票
1 回答
1346 浏览

laravel - Laravel-echo-server:如何监听用户离开频道

最近我一直在摆弄 Laravel Echo 和 Laravel Echo Server,这是 Laravel Echo 的 socket.io 服务器实现。

网络上的内容不多,我可能遗漏了一些要点..

当用户加入或离开频道(在我的情况下是存在频道)时,我可以从 laravel-echo-server 的 cli 中看到。我有一个 Laravel 事件,它执行一些我想在用户离开状态频道时触发的数据库操作。我怎样才能做到这一点?

谢谢

0 投票
1 回答
379 浏览

node.js - remoteDisconnect socket.io 和 redis

我正在尝试在 NodeJs 中使用Redis 适配器实现socket.io 。

大多数情况下它可以工作,但有时我在尝试断开/连接套接字时仍然会出错,所以我认为我没有正确实现它。

socket.disconnect();有人可以解释一下和之间有什么区别吗 io.of('/').adapter.remoteDisconnect();

如果我用以下方式初始化我的 io:

那么不socket.disconnect();应该知道使用redisIO吗?如果使用remoteDisconnect我仍然可以捕获socket.on('disconnect', fn)还是应该remoteDisconnect被调用socket.on('disconnect', fn)

如果客户端断开连接会发生什么?如何将它传播到 socket.io 集群?

任何工作示例将不胜感激:)

谢谢!

0 投票
1 回答
4782 浏览

socket.io - 从 PHP 向 socket.io 发送事件

您好我正在尝试将事件从 PHP 发送到 socketio 服务器。我试过这两种叉子:

https://github.com/rase-/socket.io-php-emitter
https://github.com/ashiina/socket.io-php-emitter

PHP代码:

包.json:

节点服务器:

我打开了 redis-cli 监视器,我可以看到它向 redis 发布数据,但我从来没有看到日志出现。我可以从浏览器发出事件,但 PHP 的永远不会出现。

任何想法我做错了什么?

0 投票
1 回答
2923 浏览

node.js - socket.io-redis 不断抛出 NOAUTH 错误

我正在尝试连接到受密码保护的 redis 服务器,但由于某种原因,我不断收到错误消息:

events.js:141 抛出错误;// 未处理的 'error' 事件 ^ ReplyError: Ready check failed: NOAUTH Authentication required. 在 parseError (/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser.js:193:12) 在 parseType (/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser. js:303:14)

我知道密码是正确的,因为我在 redis-cli 中尝试过,它工作正常。下面是代码:

有谁知道我为什么会收到这个错误?

0 投票
1 回答
123 浏览

mysql - Node.js 集群与 socket.io 和 mysql sessionstore

我正在尝试集群一个运行 mysql、mysql 会话存储和大量使用 socket.io 的节点应用程序。我正在寻找一种方法来适应 mysql 中的 socket.io 会话存储,但我只找到了一些 redis 适配器(遵循此指南:https ://github.com/elad/node-cluster-socket.io )

有没有办法在不安装 redis 的情况下使用 socket.io 和 mysql 实现节点集群?

0 投票
1 回答
2197 浏览

node.js - socket.io-redis 模块不能跨服务器工作

嘿伙计们,我正在尝试按照socket.io-redis文档实现 socket.io-redis 模块。将消息从一个客户端广播到同一服务器上的另一个客户端时,它工作正常。但是当我运行两台相同的服务器时,一台在 80 端口,一台在 81 端口,并尝试在客户端 A(连接到端口 80)和客户端 B(连接到端口 81)之间广播消息,没有消息通过。这是我的代码:

初始化套接字连接时,客户端的用户 ID 被设置为键值对到它在 redis 中的相应 socket.id,并使用以下方法检索:

redis-cli 监视器显示消息实际上正在发布,据我了解,如果两个 websocket 服务器都连接到同一个 redis 服务器,websocket 消息应该能够在不同地址的服务器之间传递。

但是,当在不同端口上使用两个相同的服务器时,客户端 A 不会收到来自客户端 B 的消息。客户端 A 只有在连接到与客户端 B 相同端口的服务器时才能接收消息。

如果有人可以提供帮助,将不胜感激,并且据我所知,我使用的 socket.io-redis 适配器模块完全错误。

0 投票
2 回答
1573 浏览

socket.io - Socket.io - 使用多个节点

所以我正在研究跨多个进程运行socket.io。

这里的指南:https ://socket.io/docs/using-multiple-nodes/给我留下了一些问题。

它提到了使用配置 nginx 在 socket.io 进程之间进行负载平衡,但它也提到了使用下面 Node.js 中的内置集群模块。

我应该为此使用 nginx 和 Node.js 中的集群模块吗?

另外我如何判断负载平衡是否有效?

我使用 nginx 选项对它进行了测试,其中两个 socket.io 进程使用 redis 适配器和集群模块运行。

这是我在 nginx 配置中的内容:

这是我的 socket.io 代码的一个示例(大部分来自这里:https ://github.com/elad/node-cluster-socket.io ):

连接工作得很好,虽然我在本地测试它..

我怎么知道它是否工作正常?每次客户端连接时,似乎都连接到 port 上的 socket.io 进程6001

客户端连接代码连接到端口3000