如何防止我的服务器web套接字淹没我的浏览器客户端



这对我来说是一个很新的问题,所以如果这是一个愚蠢/明显的问题,请原谅我。

我的服务器上有一个web套接字。我发送了大约40个jpeg作为字节数组(大约为1个字节)。每秒12kb的大小。

在客户端,我将图像显示在画布控件上。

每个JPEG上都有一个时间戳水印。

每隔一段时间,时间戳开始滞后于当前系统时间。

有时几分钟前。

我更愿意在客户端确定这种延迟是否存在,然后以某种方式刷新web套接字。

这可能吗?

感谢另外

有人向我指出,只要断开连接并重新连接,就可以清除套接字中的虚消息。

下面的代码显示了如果失去连接,我的客户端如何重新连接。我必须把这个放在这里,以防我没有从服务器接收到断开连接:

function Reconnect() {
    try {
        ws = new WebSocket(url);
        ws.binaryType = 'arraybuffer';
        ws.onerror = function (e) {
            try {
                console.log('onerror');
            }
            catch (err) {
                console.log(err);
            }
        };
        ws.onclose = function () {
            try {
                Reconnect();
            }
            catch (err) {
                console.log(err);
            }
        };
        ws.onopen = function () {
            try {
                StartPing();
                console.log('onopen');
            }
            catch (err) {
                console.log(err);
            }
        };
        ws.onmessage = function (e) {
                try{
                  ''display image on canvas
                }
                catch (err) {
                    console.log(err);
                }
            }
        };
    }
    catch (err) {
        Reconnect();
    }
}
function StartPing() {
    try{
        window.clearInterval(window.timerID);
        if (!window.timerID) { /* avoid firing a new setInterval, after one has been done */
            window.timerID = setInterval(Ping, 20000);
        }
    }
    catch (err)
    {
        console.log(err + ' Reconnect');
    }
}
function Ping() {
try {
    var now = new Date();
    var d = now.format("yyyymmddhhMMss");
    var currentTimeStamp = d + '000';
    if (parseInt(currentTimeStamp) - parseInt(lastUpdated) < 60) {
        console.log('Reconnect');
        Reconnect();
    }
    else {
        StartPing();
    }
}
catch (err) {
    console.log(err + ' Ping');
}

你应该确保在连接一个新的WebSocket之前关闭你的旧WebSocket,否则你会得到多个同时打开的连接,这不是你想要的(当你试图理解发生了什么时,会把你扔出去)。

在你的Reconnect函数中,执行:

function Reconnect() {
    try {
        // ws is probably some global variable, so:
        if(ws instanceof WebSocket)
          ws.close();
        ws = new WebSocket(url);
        ws.binaryType = 'arraybuffer';
        // Rest of code...

相关内容

  • 没有找到相关文章

最新更新