当用户加入时,我将其ID更改为较短的随机代码。这是为了使用id作为前端可见的会话ID,我提到这只是因为否则你可能会混淆为什么我的套接字ID不是标准的,它甚至可能与问题有关。
然后创建一个以该代码/ id作为名称的房间,这里是会话创建事件套接字处理程序中的相关代码,其中client
是大多数人称之为socket
和{{1}的内容是大多数人称之为socket
的,我只是以不同的方式命名,所以希望到目前为止很清楚:
io
所以在这一点上,我们得到一个日志,它通过查看var sessionId = client.id;
debug.log('Session ID: ' + sessionId);
debug.log('Data: ' + JSON.stringify(data, null, 3));
debug.log(JSON.stringify(socket.sockets.adapter.rooms));
client.join(sessionId);
debug.log(JSON.stringify(socket.sockets.adapter.rooms));
callback(sessions[sessionId]);
对象(一个在加入房间之前显示,另一个在之后显示)显示客户端是新套接字室的成员:< / p>
socket.sockets.adapter.rooms
从这里开始,我将最后的日志缩短到最后的相关信息:
[Debug][Create Session Event Handler]: Session ID: QXVLSLE
[Debug][Create Session Event Handler]: Data: {
"name": "Jonathan"
}
[Debug][Create Session Event Handler]: {"/#0JCm5cyTpqTkXTIoAAAA":{"sockets":
{"/#0JCm5cyTpqTkXTIoAAAA":true},"length":1},"/#pqG0tzoc4i7xg8ygAAAB":{"sockets":
{"/#pqG0tzoc4i7xg8ygAAAB":true},"length":1},"/#R9HQ2k6cOqF_bodmAAAC":{"sockets":
{"/#R9HQ2k6cOqF_bodmAAAC":true},"length":1}}
[Debug][Create Session Event Handler]: {"/#0JCm5cyTpqTkXTIoAAAA":{"sockets":
{"/#0JCm5cyTpqTkXTIoAAAA":true},"length":1},"/#pqG0tzoc4i7xg8ygAAAB":{"sockets":
{"/#pqG0tzoc4i7xg8ygAAAB":true},"length":1},"/#R9HQ2k6cOqF_bodmAAAC":{"sockets":
{"/#R9HQ2k6cOqF_bodmAAAC":true},"length":1},"QXVLSLE":{"sockets":
{"QXVLSLE":true},"length":1}}
接下来我们有socket事件的处理程序,第二个客户端希望加入会话/房间:
"QXVLSLE":{"sockets":
{"QXVLSLE":true},"length":1}}
然后是日志,它演示了客户端加入会议室,以及前后debug.log('Client Joining Session: ' + sessionId);
sessions[sessionId].clients[client.id] = {
name : name,
id : client.id
};
debug.log(JSON.stringify(socket.sockets.adapter.rooms));
client.join(sessionId);
debug.log(JSON.stringify(socket.sockets.adapter.rooms));
对象,它显示新客户端成功加入会议室:
socket.sockets.adapter.rooms
所以这似乎工作正常,但是现在,我希望以下代码向房间内的客户发送消息,并且它没有发生:
[Debug][Join Session Event Handler]: Client Joining Session: QXVLSLE
[Debug][Join Session Event Handler]: {"QXVLSLE":{"sockets":
{"QXVLSLE":true},"length":1}
[Debug][Join Session Event Handler]: {"QXVLSLE":{"sockets":
{"QXVLSLE":true,"L1FFBDU":true},"length":2}
确保此代码正在运行,我看到日志,会话ID似乎正确,日志也匹配。 socket.to(sessionId).emit('receive message', {
name : data.name,
message : data.message
});
事件正在服务器端发出并在客户端进行侦听,但没有消息通过。所以我假设我在房间处理方面做错了,但我不知道它可能是什么。
我在做房间创作/发射错了吗?或者我应该到别处寻找问题?
答案 0 :(得分:0)
socket.to(sessionId).emit('receive message', {
name : data.name,
message : data.message
});
应该只是:
socket.emit('receive message', {
name : data.name,
message : data.message
});