gpt4 book ai didi

javascript - 刷新后如何将数据发送到用户套接字 ID - socket.io

转载 作者:行者123 更新时间:2023-12-03 11:56:44 24 4
gpt4 key购买 nike

举个例子,假设用户将一些 json 发送到包含他的套接字 id 的服务器,服务器需要 5 秒来响应。当它准备好响应时,它从 json 对象中提取 socket.id,并只向该套接字发出一些数据。

如果用户在发送消息和服务器响应之间刷新(因此更改他正在连接的套接字),我将如何确保他们仍然接收数据?

服务器:

io.on("connection", function(socket) {
socket.on("data", function(data) {
var id = data.socket_id;

io.sockets.connected[id].emit("response", "sup");

// I know I could just do -> socket.emit("response", "sup") <- but im simply trying it out for learning purposes
})
})


客户:

socket.emit("data", {
username: "chris",
socket_id: socket.id,
});

socket.on("response", function(res) {
console.log(res);
})

最佳答案

如果用户刷新他们的页面,这将建立一个新的 socket.io 连接,该连接将有一个新的和不同的 socket.id .因此,如果您希望能够跨刷新识别特定的浏览器 session ,那么您需要一个在页面刷新后仍然存在的标识符。那不是socket.id .

最有可能的是,您会在 cookie 中使用某种持久的用户 ID。如果您还没有进行任何类型的身份验证,在 cookie 中为您提供用户 ID,那么您可以简单地在 cookie 中创建一个唯一 ID,如果用户向您的服务器发出请求时还没有唯一 ID。这将为每个传入的 socket.io 连接在 cookie 中提供一个唯一的用户 ID(只要 cookie 没有被禁用)。当您的 socket.io 连接连接时,您可以将其添加到 Map您保留的对象是用户 ID 是键和当前的 socket.id是数据,您可以将用户 ID 添加为套接字上的属性。当 socket 断开连接时,您可以将其从 Map 中移除。目的。

然后,当您想保存对用户的引用时,您保存的是用户 ID,而不是 socket.id并且该引用在页面刷新时保持不变。当你想发送到userID时,可以在Map中查找。获取当前 socket.id 的对象(如上所述,您的连接和断开连接事件处理程序将自动保持最新状态),然后使用它发送给它。

关于javascript - 刷新后如何将数据发送到用户套接字 ID - socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338970/

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