Javascript 更改请求标头SOCKET.IO(无需断开和重新连接)

Javascript 更改请求标头SOCKET.IO(无需断开和重新连接),javascript,socket.io,Javascript,Socket.io,我正在设置请求标头,同时建立与Socket.IO服务器的连接,如下所示: /* socket io client */ let socketIO = new SocketIO("http://localhost:8080", { extraHeaders: { accessToken: :"access123", refreshToken: "refresh123" } }); 连接客户端后(无需断开和重新连接

我正在设置请求标头,同时建立与Socket.IO服务器的连接,如下所示:

/* socket io client */
let socketIO = new SocketIO("http://localhost:8080", {
  extraHeaders: {
    accessToken: :"access123",
    refreshToken: "refresh123"
  }
});

连接客户端后(无需断开和重新连接),如何更改标头?

目前,握手后无法更新标头。根据报告:

您可以在会话期间更新标题,但不会更新 反映在服务器端(作为socket.handshake.headers对象 包含在Socket.IO握手过程中发送的标头)


在客户端,您可以在更改
socket.io.opts.extraHeaders
对象时更新标头,但如果希望更改也反映在服务器上,则需要重新连接客户端。在客户端,您可以强制重新连接类似于
client.disconnect().connect()。所以,每分钟断开和重新连接套接字,这是否稳定?这取决于应用程序的繁忙程度和服务器的功能。我认为使用
extraHeaders
存储身份验证令牌不是一个好主意,因为您将经常刷新它们。查看以下帖子-。如果你想实现一些定制的东西,你可以将每个请求作为数据参数传递令牌,并在服务器上使用逻辑来验证令牌和刷新令牌的其他通道,这取决于你。我仅使用JWT进行身份验证,得出了将令牌作为数据参数传递的相同结论。但是是否有任何方法可以拦截请求并为每个发出的事件附加令牌(如
axios
中的拦截器),或者我应该手动将令牌添加到每个事件的数据参数中。像客户端的中间件吗?我不确定是否有这样的功能集成在
socket.io client
中,但您可以始终将发送包封装在一个函数中,在该函数中,您可以始终注意将令牌附加到发送的数据中。