我使用网页套接字,使用PHP5和浏览器作为客户端。我已经从网站http://code.google.com/p/phpwebsocket/获取了代码。
我运行服务器,并且客户端也是连接的。我也可以聊天。现在,当我重新启动服务器时(通过终止它并重新启动它),客户端获得断开连接的信息,但当我发送消息时,它不会自动与服务器重新连接。
如何做到这一点?例如,当我得到断开连接的信息时,我是否应该检查它并将其发送到JavaScript以刷新页面或重新连接?
发布于 2011-11-23 02:01:46
服务器重新启动时,Web套接字连接将关闭,因此会触发JavaScript onclose
事件。下面是一个每隔5秒尝试重新连接的示例。
function start(websocketServerLocation){
ws = new WebSocket(websocketServerLocation);
ws.onmessage = function(evt) { alert('message received'); };
ws.onclose = function(){
// Try to reconnect in 5 seconds
setTimeout(function(){start(websocketServerLocation)}, 5000);
};
}
发布于 2013-12-16 21:59:25
Andrew给出的解决方案并不完美,因为在连接丢失的情况下,服务器可能会发送几个关闭事件。
在这种情况下,您将设置几个setTimout。Andrew给出的解决方案只有在服务器在5秒内准备就绪的情况下才有效。
然后,基于Andrew solution,reworked,我利用了setInterval将ID附加到window对象(这样它就可以在“任何地方”使用):
var timerID=0;
var socket;
/* Initiate what has to be done */
socket.onopen=function(event){
/* As what was before */
if(window.timerID){ /* a setInterval has been fired */
window.clearInterval(window.timerID);
window.timerID=0;
}
/* ... */
}
socket.onclose=function(event){
/* ... */
if(!window.timerID){ /* Avoid firing a new setInterval, after one has been done */
window.timerID=setInterval(function(){start(websocketServerLocation)}, 5000);
}
/* That way, setInterval will be fired only once after losing connection */
/* ... */
}
发布于 2017-12-15 06:29:27
无可奉告,但以下内容:
var socket;
const socketMessageListener = (event) => {
console.log(event.data);
};
const socketOpenListener = (event) => {
console.log('Connected');
socket.send('hello');
};
const socketCloseListener = (event) => {
if (socket) {
console.error('Disconnected.');
}
socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open', socketOpenListener);
socket.addEventListener('message', socketMessageListener);
socket.addEventListener('close', socketCloseListener);
};
socketCloseListener();
// for testing
setTimeout(()=>{
socket.close();
},5000);
另外,https://www.npmjs.com/package/back已经足够好了:)
https://stackoverflow.com/questions/3780511
复制相似问题