如果一段时间未收到 websocket,则刷新页面
Posted
技术标签:
【中文标题】如果一段时间未收到 websocket,则刷新页面【英文标题】:Refresh page if websocket not received for some time 【发布时间】:2019-10-24 07:55:31 【问题描述】:我有一个页面,在收到websocket
后,它会通过javascript
执行某些操作。仅当在上次和我想要的时间之间没有收到 websocket
时,我希望此页面在一段时间后重新加载。
<script>
if ("WebSocket" in window)
var ws = new WebSocket('ws://192.168.33.1:5000');
var variableSpan = document.getElementById('variable');
ws.onmessage = function (event)
var message = JSON.parse(event.data);
console.log(message);
jQuery('#variable').empty();
$(function ()
$.get(message.variable, function (data)
$("#variable").append(data);
);
);
setTimeout(function ()
window.location.reload(); // you can pass true to reload function to ignore the client cache and reload from the server
, 10000);
</script>
我尝试了类似的方法,但它似乎不起作用。我会很感激一些帮助:)
【问题讨论】:
在`window.location.reload()`之前检查if(ws.readyState === WebSocket.CLOSED)
每次收到消息都需要清除之前的超时时间。
另外,如果你因为websocket连接问题而这样做,你可以简单地创建一个新的websocket而不是刷新页面。
连接错误我不需要这个。在这种情况下,这只是用户“不活跃”的情况
【参考方案1】:
检查 webSocket 状态后重新加载
function onWebSocketClosed()
if (webSocket.readyState != WebSocket.OPEN)
try
console.error("webSocket is not open: " + webSocket.readyState +"Reloading Page");
window.location.reload()
catch (error)
console.log('onWebSocketClosed : 0' , error)
【讨论】:
你是在建议我把这段代码放在setTimeout
中?
我觉得最好在setTimeout里面调用函数以上是关于如果一段时间未收到 websocket,则刷新页面的主要内容,如果未能解决你的问题,请参考以下文章
javascript中的Websockets,页面刷新或导航到其他页面时连接终止[重复]