javascript - 客户如何离开所有旧房间通过socketio连接到新房间
问题描述
我在服务器上有 5 个房间让我们说“A”、“B”、“C”、“D”、“E”
服务器端 即
io.on('connection', (socket) => {
console.log('New user connected');
socket.on('disconnect', () => {
console.log('User was disconnected');
});
});
//创建房间的函数
function connectSocket(data) {
io.emit(data.device_id, data);
console.log('room',data.device_id, 'created');
}
// 房间创建调用
connectSocket("A");
客户端
var socket = io(*url*);
socket.on('connect', function () {
console.log('Connected to server');
});
socket.on(*roomname*, function (message) {
console.log(message);
});
` 问题
我想把房间 A 换到 B
但在我切换之前我想关闭所有连接
当我加入新房间时,我不想收听旧房间的数据
解决方案
我认为您将活动与房间混为一谈。io.emit(data.device_id, data);
不创建房间,它只是将数据发送给每个连接的客户端,第一个参数是事件的名称,第二个是数据。文档。
在 Socket.IO 中使用房间的正确方法如下:
加入房间:
socket.join(roomId); // roomId is a string
离开房间:
socket.leave(roomId);
发送给除发件人之外的“游戏”房间中的所有客户:
socket.to('game').emit('nice game', "let's play a game");
发送给“游戏”房间中的所有客户,包括发件人:
io.in('game').emit('big-announcement', 'the game will start soon');
有关更多信息,请查看Socket.IO 备忘单和有关房间和命名空间的文档。
我希望它有帮助!
推荐阅读
- azure - Azure 应用程序网关 - 未知错误。请再试一次
- react-native - 如何从嵌套堆栈导航器导航到选项卡导航器中的特定页面
- cordova - 科尔多瓦文件系统覆盖字符串
- r - R 中的 XGBoost 解释器 - 如何对特征贡献实施约束?
- python-3.x - Pygmo 2:控制内存分配
- angular - 我应该怎么做才能使用 grails 3 和 Angular 创建一个 Web 应用程序?
- java - Spring Boot Index-Page 在 Docker 容器中返回 403
- ios - UICollectionView shouldShowMenuForItemAt 未调用
- android - MPAndroidChart:自定义 Y 轴上的毕业步骤
- visual-studio-code - 有没有办法用 vscode.workspace.createFileSystemWatcher 观察多种文件类型