gpt4 book ai didi

javascript - 页面关闭后向 node.js 发送消息

转载 作者:行者123 更新时间:2023-11-30 15:02:20 26 4
gpt4 key购买 nike

所以我对它很陌生,所以如果我这样做是完全错误的方法,我深表歉意,但我目前正在使用 node.js 和 express 和 socket.io 编写一个小聊天应用程序。我设法将登录消息记录到控制台,但我真的很难处理注销消息。当用户打开页面时,我从 cookie 中取出房间名称和用户名并将其发送到服务器,如下所示:

var socket = io();
var roomname = readCookie('Roomname');
var nickname = readCookie('Nickname');
var data = {'type': 'user', 'channel': roomname, 'user': nickname, 'data': "joined"};

socket.emit('chat', data);

之后,我在服务器端过滤消息并将答案发送给所有客户端,如下所示:

case 'user':
io.emit('chat/' + msg.channel, {type: 'user', user: msg.user, data: msg.data});
break;

我总是发送字符串“chat”,后跟房间名称作为 channel 名称,这样只有在正确房间中的用户才能看到消息。之后我整理一下客户端收到了什么样的消息:

case 'user':
console.log(msg.user + " just " + msg.data + " the room!");
break;

现在我唯一需要做的就是在用户关闭页面后以某种方式将房间和用户名发送到服务器端,这样我就可以发送消息,但使用“left”。 (像这样)

var data = {'type': 'user', 'channel': roomname, 'user': nickname, 'data': "left"};

socket.emit('chat', data);

我的方法是找到一个在正确时间触发代码的事件,我已经查看堆栈溢出一个小时了,但我找不到任何可以完成这项工作的东西。我已经尝试了我能找到的 window.onbeforeunload 的所有变体,但似乎没有一个起作用。我可以用其中一些将一些东西记录到控制台,但我永远无法向服务器端发送消息。我知道这可能无法以我希望的方式实现,但我真的想不出下一步该尝试什么。有人可以帮帮我吗?

最佳答案

当客户端第一次连接时,您可以将有关客户端用户名的信息添加到套接字对象中。然后当客户端断开连接时,您将能够使用 socket.username。

客户:

var socket = io();
var roomname = readCookie('Roomname');
var nickname = readCookie('Nickname');
socket.on('connect', () => {
socket.emit("hello", {nick:nickname, room:roomname});
});

服务器:

socket.on("hello", (data) => {
socket.username = data.nick;
socket.join(data.room);
socket.room = data.room;
});
socket.on("disconnect", () => {
var data = {'type':'user', 'channel':socket.room, 'user':socket.username, 'data':'left'};
socket.broadcast.to(socket.room).emit('chat', data};
socket.leave(socket.room);
});

关于javascript - 页面关闭后向 node.js 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46322068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com