当前位置: 首页 > 知识库问答 >
问题:

插座io,使用PHP会话作为套接字。带有redis的id

苍恩
2023-03-14

我正在开发一个在线的,基于文本的RPG(Github);目前我有一个PHP后端,它将会话数据存储在redis服务器中。对于需要实时通信的所有内容(聊天,消息传递和连接用户列表),我使用Node.js和 socket.io 用于websocket。

我目前在我的网络索克服务器上有3个命名空间:

  1. 消息服务器
  2. 在线服务器
  3. 聊天服务器

我已经让它工作了,但恐怕大部分是由“黑客”制作的。现在,我无法向特定的客户发送信息。例如,如果我正在给另一个用户写一条私人消息,当我点击“发送”时,我想要下面的逻辑。

> < li >用户正在编写他的消息,当他点击“发送”时,客户端向websocket服务器发出类似于< code>{"sender": 15," message": "blablabla "," receiver": 17}的内容; < li>

在websocket服务器上,服务器获取事件,我必须从那里将“接收者”与客户端会话对齐。在每次连接到一个名称空间时,我向socket对象添加两个属性,accountId和accountName,它们是我的Auth模块的结果。

/* POSTA SERVER */ postaServer.on('connection', function postaConnect(socket) { var phpSessId = cookie.parse(socket.request.headers.cookie) .PHPSESSID;if (phpSessId === undefined || phpSessId === '') { console.log('Sessione non trovata'); socket.disconnect(); } else { // modulo socket_auth checkSession(phpSessId, function (auth) { if (auth) { // Auth 从 redis socket.accountId = auth.id; socket.accountName = auth.nome; socket.emit('serverMessage', 'connesso al server di posta'); var conn = mysql.createConnection(DB); getMessaggiPosta(socket.accountId, conn, function (err, result) { if (err) { console.日志(错误);} else { socket.emit('refreshPosta', result); } });} else { socket.disconnect(); } });} });

如何在不使用内置 socket.id 的情况下仅向特定客户端发出事件?

共有1个答案

阎乐池
2023-03-14

你可以试试node的模块“socket-io-emitter”。

var io = require('socket.io-emitter')({
  host: redisHost,
  port: redisPort
});

然后通过用户特定的密钥向特定用户发出:

io.to('myKey' + '_user_' + userId).emit('myEvent', {
  data: 'hello'
});
 类似资料:
  • 我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面

  • 我尝试用laravel echo服务器和套接字创建实时应用程序。io,但客户端未成为消息 这是我的代码: .环境 配置/queue.php config/database.php 路线/频道。php src/echo。js 活动/MessagePosted.php 消息控制器。php 在Redis cli PING命令return PONG中安装了Redis服务器。我使用php artisan q

  • 我有以下反应组件 它拥有的唯一状态是调用中使用useState钩子定义的参与者的hashTable。 然后,我使用useEffect来监听聊天室的套接字事件—只有4个事件 然后在那之后,我定义了4个回调处理程序,这些事件与服务器上执行的顺序有关 最后,我有另一个回调函数,它传递给列表中的每个子参与者,以便在子组件创建其rtcPeer对象后,将其发送给父组件,以便在参与者的hashTable中的参与

  • 我正在使用flutter socket io与运行Node/Express的服务器通信。 服务器代码: 我的扑动代码: 当我尝试连接时,我会得到一个超时错误,该错误在OnConnectRetror中捕获。 节点服务器正在运行debian,我已经检查了防火墙状态: 当我通过chrome打开url时,我得到的是“你好”信息。当我尝试netcat“NC-VZ MyServerIP8080时,我已经成功地

  • 我试图用socket.io设置一个服务器,结果不好。 我主要遵循这个指南,尽管它有点过时:http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html socket.io的问题来了,我不确定是客户端还是服务器端。它似乎试图不断轮询服务器,但得到404的支持。这听起来像是socket.io没有运行,但在我

  • 非常简单的问题。我正在使用nodejs作为我的后端构建一个实时游戏,我想知道是否有任何信息可以说明哪个更可靠,哪个更高效?我在整个代码中大量使用Redis和Socket.io。所以我想知道我是否应该使用Socket.io的房间,还是使用redis的pub-sub会更好? 更新:刚刚意识到,您可能希望通过套接字使用redis发布/订阅有一个非常重要的原因。io房间。带插座。io室当您向侦听器发布时,