我传递一个包含ID的自定义查询字符串,以便在通过socket.io连接时在服务器上授权客户端。
var env = {id:12345};
var socket = io.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true});
当客户端因任何原因断开连接时,只需调用以下函数即可重新连接。
socket.socket.connect();
但是,在重新连接时env.id
通常包含与初始连接期间不同的值,并且我希望在每次重新连接时在查询字符串中包含当前值。
上述重新连接方法会再次发送初始值,即使env.id
同时更改为其他值。
我在调用重新连接函数时尝试设置当前参数,但这似乎不起作用。
socket.socket.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true})
是否有一种简单的方法只使用当前env.id
值更新查询字符串,然后重新连接?
或者我是否需要在断开连接时销毁整个套接字对象,然后使用var socket = io.connect()
与当前ID建立新连接?
答案 0 :(得分:10)
我分析了socket对象并找到了解决方案,因此我回答了我自己的问题。
查询字符串存储在socket.socket.options.query
内。您可以在重新连接之前将其更改为所需的值。
socket.socket.options.query = 'i='+env.id;
socket.socket.connect();
答案 1 :(得分:8)
答案 2 :(得分:2)
使用socket.io版本1.4.8,我尝试了很多东西来实现这一点,最终对我有用的是在调用connect之前设置socket.io.uri和socket.io.opts.query( )重新连接
// Original connection
socket = io.connect('https://socket.example.com/?token=' + data.socket_auth_token, {
reconnection: false,
transports: ['websocket', 'polling'],
'sync disconnect on unload': true
});
// Reconnect
socket.io.uri = 'https://socket.example.com/?token=' + data.socket_auth_token;
socket.io.opts.query = 'token=' + data.socket_auth_token;
socket.connect();
这里有更多上下文代码:
<script src="//js/contrib/socket.io.js"></script>
<script>
socket = io.connect('https://socket.example.com/?token=' + data.socket_auth_token {
reconnection: false,
transports: ['websocket', 'polling'],
'sync disconnect on unload': true
});
function reconnectSocket() {
if (typeof socket != 'undefined' && !socket.connected) {
$.ajax({
url: '/api/socket/',
type: 'POST',
data: {
'action': 'generate_token',
},
dataType: 'json'
}).done(function (data) {
socket.io.uri = 'https://socket.example.com/?token=' + data.socket_auth_token;
socket.io.opts.query = 'token=' + data.socket_auth_token;
socket.connect();
});
}
setTimeout(reconnectSocket, 5000);
}
setTimeout(reconnectSocket, 5000);
</script>
答案 3 :(得分:0)
您可以像这样使用反射:
$('#ShowEvent').click(function() {
var idEvent = document.getElementById("ShowEvent").getAttribute("idEvent");
$.ajax({
url: 'http://localhost/salgadar/public_html/Event/GetEventById',
type: 'get',
data: {
idEvent: idEvent
},
dataType: 'JSON',
success: function(data) {
alert('AJAX call was successful!');
$("#AjaxReturn").html(data)
},
error: function() {
alert('There was some error performing the AJAX call!');
}
});
console.log(data);
});
答案 4 :(得分:0)
对于 v2.1.1,我通过在更改查询参数后断开连接并重新连接来解决这个问题:
socket.socket.query = { ...updated queries here}
socket.socket.disconnect().connect()