javascript - socket.io 房间不工作

标签 javascript node.js socket.io

我是 Node js 上的 socket.io,我的目标是将创建房间和加入房间事件发送到服务器,然后广播给加入房间的人。我成功创建了我认为的房间,但是当我使用 .to() 发送任何内容时,它不起作用。

index.html

<html>

<head>
    <script src="/socket.io/socket.io.js"></script>
</head>

<body>
    <label for="joinRoom"> Join room</label>
    <form id="joinRoom">
        <input id="room" /><button>Send</button>
    </form>
    <label for="createRoom"> Create room</label>
    <form id="createRoom">
        <input id="players" /><button>Send</button>
    </form>
    <script src="/client.js"></script>
</body>

</html>

客户端.js

const socket = io();

socket.on('test', (data) => console.log(data));

document.getElementById('joinRoom').onsubmit = () => {
    socket.emit('joinRoom', document.getElementById('room').val());
    return false;
};

socket.on('roomCreated', (id) => {
    console.log(id);
    //
});

document.getElementById('createRoom').onsubmit = () => {
    socket.emit('createRoom', document.getElementById('players').value);
    return false;
};

服务器.js

const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io').listen(server);

app.use(express.static('public'));

server.listen(3000, () => {
    console.log('listening...');
});

let currentRoomID = 0;
const rooms = [];

io.on('connection', (socket) => {
    function joinRoom(room) {
        socket.join(room.toString());
    }
    socket.on('createRoom', () => {
        const roomID = currentRoomID++;
        rooms[roomID] = `foo ${roomID}`;
        joinRoom(roomID, socket.id);
        io.sockets.emit('roomCreated', roomID);
        socket.to(roomID.toString()).emit('test', rooms[roomID]);
    });
    socket.on('joinRoom', (room) => {
        joinRoom(room, socket.id);
    });
});

最佳答案

如果您想向您所在的特定房间中的人发送特定消息,请执行以下操作:

io.sockets.in(room).emit('something', something);

或者,如果您想向特定套接字发送某些内容,您可以这样做:

io.to(socket).emit('something', something);

关于javascript - socket.io 房间不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956461/

相关文章:

javascript - Sinon,使用 Promise.reject() 到 stub.rejects() 观察不同的行为

javascript - 自动禁用 AWS SQS lambda 触发器

javascript - Socket.io socket.handshake 在断开连接时未定义

javascript - 如何循环JSON数据

javascript - 如何防止 document.write 超出 Div 框?

node.js - 在 Express 4 中使用 Nunjucks

node.js - Socket.io 'Cannot connect' 。不同域/端口上的客户端

node.js - Socket.io SSL 错误

javascript - date.now() 比较返回 NaN

javascript - 使用 getElementsByTagName 时,如何指定单击哪个元素