我正在开发一个实时聊天的在线网站,最近几天一直在尝试设置socket.io房间,但是我的自定义事件就是不能发出。
我的网站有两个路径:/
和 /play
。当有人在/
路径中填写表单后,网站会将其重定向到/play
路径。
const io = require('socket.io')(listener);
io.on('connection', socket => {
socket.on('add user', data => { // This event gets emitted when the user submits the form at `/`, in a client-side js file.
socket.username = data.username;
socket.room = data.room;
socket.score = 0;
socket.join(data.room);
io.sockets.in(data.room).emit('user joined', { // This event gets 'handled', in another (not the same one) client-size js file.
username: data.username,
room: data.room
});
});
socket.on('disconnect', function () {
io.sockets.in(socket.room).emit('user left', {
username: socket.username,
room: socket.room
});
socket.leave(socket.room)
});
});
在另一个客户端js文件中:
var socket = io.connect();
let joined = 0;
socket.on('user joined', data => {
joined++;
console.log(joined, data)
const elemental = document.createElement("LI");
const info = document.createTextNode(data.username);
elemental.appendChild(info);
document.getElementById('people').appendChild(info)
});
添加用户事件代码运行正常,但是用户加入事件没有运行。我几乎可以确定这与路径有关。我读过关于socket.io命名空间的资料,但它们似乎只是不同类型的房间。有人可以告诉我问题出在哪里吗?
编辑:我应该提到没有出现任何错误。
client-side.js
上使用socket.on('error', console.log);
吗? - Marcos Casagrande