处理Websocket的正确方法

use*_*858 10 javascript websocket

我有一个服务器Websocket连接的客户端应该在那里持续40秒左右.理想情况下它应该是永远开放的.

客户端不断向服务器发送数据,反之亦然.

现在我正在使用这个序列:

var socket;
function senddata(data)
{

    if (!socket)
    {
        socket = new WebSocket(url);
        socket.onopen = function (evt) {

            socket.send(data);

            socket.onmessage = function (evt) {
                var obj = JSON.parse(evt.data);

                port.postMessage(obj);
            }

            socket.oneerror = function (evt) {
                socket.close();
                socket = null;
            }
           socket.onclose = function(evt){
               socket = null;
           }


        }
    }
    else
    {
        socket.send(data);
    }

}
Run Code Online (Sandbox Code Playgroud)

显然,根据当前逻辑,在出现错误的情况下,可能根本不发送当前请求数据.

坦率地说,有时会给出websocket仍然处于连接状态的错误.由于网络问题,此连接经常中断.简而言之,它并不能很好地发挥作用.

我已经阅读了一个更好的设计:如何等待WebSocket的readyState更改,但不包括我需要处理的所有情况.

我也用Google搜索了这个,但无法得到正确的程序.

那么通过Websockets发送常规数据的正确方法是什么呢?它可以很好地处理连接中断等问题?

GMc*_*ris 2

您似乎没有报道的事件即将结束。这应该工作得很好,因为每当连接终止时就会调用它。这比 onerror 更可靠,因为并非所有连接中断都会导致错误。