node.js - 加入房间并在与 socket.io 和 node.js 断开连接时自动重新加入房间
问题描述
我有一个我认为很容易解决的问题,但我根本找不到它。我正在将用户连接到我的 node.js 服务器并将套接字重命名为用户名。我还将用户添加到房间。一切正常,但如果用户断开连接会发生什么?我可以使用 forceNew : true 但这肯定只会重试建立新连接,而不是重命名套接字并加入房间。
我正在使用服务器端“设置”来重命名和加入房间,但是如何在重新连接时自动执行此操作,或者我是否尝试以错误的方式执行此操作?
所以在我的客户端我这样连接:
var socket = io.connect('http://localhost:8080' ,{'forceNew':true});
var job_id = "100102";
var client_id = "test1";
socket.emit('setup', client_id, job_id);
服务器端是:
io.on('connection', (socket) => {
socket.on('setup', (username, job_id) => {
socket.id = username;
socket.join(job_id);
});
});
解决方案
我通过立即添加“连接”来做到这一点,并且效果很好。必须保持forceNew:true
为好。
服务器端
io.on('connection', (socket) => {
socket.emit("connection");
});
客户端
socket.on('connection', () => {
socket.emit('signin', client_id, job_id);
socket.emit('check', job_id, client_id);
console.log("CONNECTED");
});
推荐阅读
- django - 带有 JsonResponse 的 django cookie 切割器中的 CRITICAL WORKER TIMEOUT
- r - 如何按几组汇总数据(R)
- angular - Angular 8:HttpClient - 发送长字符串
- excel - 如何将本地excel文件导入雪花数据库表?我需要每天这样做
- templates - 如何使用 K8S 测试 pod 模板中的删除GracePeriodSeconds
- reactjs - 无法清除浏览器内存,即使使用 pixi 清除所有纹理缓存。我正在使用 pixioverlay 并做出反应传单
- node.js - 如何为谷歌云功能模拟器指定内存?
- maven - 如何触发 IntelliJ 重新导入单个 Maven 依赖项?
- package - 在 conda 中安装 Octave 失败
- java - 无法在生成的 JAR 中找到主类