【问题标题】:Refresh page if websocket not received for some time如果一段时间未收到 websocket,则刷新页面
【发布时间】: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而不是刷新页面。
  • 连接错误我不需要这个。在这种情况下,这只是用户“不活跃”的情况

标签: javascript jquery websocket page-refresh


【解决方案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里面调用函数
猜你喜欢
  • 1970-01-01
  • 2017-11-20
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多