gpt4 book ai didi

javascript - 异步函数作为 socketio 监听器的处理程序

转载 作者:行者123 更新时间:2023-11-28 03:15:20 25 4
gpt4 key购买 nike

我正在尝试构建对 socketio websockets 的身份验证,但遇到了涉及身份验证 token 设置的问题。问题归结为以下几点:我用来获取最新身份验证 token 的函数是异步的,但似乎为 socketio 监听器提供了一个 async 函数>“reconnect_attempt”事件在尝试重新连接之前不会等待函数返回。

简而言之,这段代码

socket.on("reconnect_attempt", async () => {
const token = await getIdToken();
socket.io.opts.query = { token };
});

在重新连接请求发送到服务器之前,实际上并没有设置套接字的query.token。因此,当 token 过期后重新连接时,会在获取新 token 的同时发送过期 token 。

有没有办法以某种方式配置socketio,以便它在实际触发重新连接请求之前等待监听器的处理程序函数返回?如果没有,我想我将不得不主动刷新 token 并将其存储在应用程序中的某个位置,但我很好奇这是否可能。

最佳答案

看起来“reconnect_attempt”回调实际上并没有中断正在发出的请求,但它只是允许您在尝试时进行监听。相反,您可以将 socketio 连接设置为根本不自动重新连接并订阅断开事件。然后,正确处理 token 生成并从那里发起新请求。

const socket = io({
autoConnect: false
});

// socket.disconnected is a boolean to tell you if the connect is up or down
socket.on('connect', () => {
console.log(socket.disconnected); // false
});

https://socket.io/docs/client-api/#Event-%E2%80%98reconnect-attempt%E2%80%99-1

关于javascript - 异步函数作为 socketio 监听器的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689253/

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