在socket.io重新连接时更新查询字符串参数

1ns*_*ane 11 parameters reconnect node.js socket.io

我传递一个包含ID的自定义查询字符串,以便在通过socket.io连接时在服务器上授权客户端.

var env = {id:12345};
var socket = io.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true});  
Run Code Online (Sandbox Code Playgroud)

当客户端因任何原因断开连接时,只需调用以下函数即可重新连接.

socket.socket.connect();
Run Code Online (Sandbox Code Playgroud)

但是,在重新连接时env.id通常包含与初始连接期间不同的值,并且我希望在每次重新连接时在查询字符串中具有当前值.

上面的重新连接方法再次发送初始值,即使env.id同时更改为其他值.

我在调用重新连接函数时尝试设置当前参数,但这似乎不起作用.

socket.socket.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true})  
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法只使用当前env.id值更新查询字符串然后重新连接?

或者,我是否需要在断开连接时销毁整个套接字对象,然后使用var socket = io.connect()当前ID 建立新连接?

1ns*_*ane 10

我分析了套接字对象并找到了解决方案,因此我回答了我自己的问题.

查询字符串存储在里面socket.socket.options.query.您可以在重新连接之前将其直接更改为所需的值.

socket.socket.options.query = 'i='+env.id;
socket.socket.connect();
Run Code Online (Sandbox Code Playgroud)


Art*_*kii 8

在当前版本的socket.io中(在编写的那一刻是1.3.7)你应该使用

socket.io.opts.query = 'i='+env.id;

但由于这个错误,请小心使用它