多个 HTML5 Websocket - 当一个连接失败时,所有剩余的 websocket 连接都会延迟



我有一个在同一页面上使用多个HTML5 websocket连接的项目。 当所有连接都可用时,页面将按预期运行。 但是,当一个或多个 websocket 连接关闭时,所有剩余的连接都将被阻止,直到错误的连接超时。 超时后,其余 Websocket 将按预期连接。

请注意下面的uris数组。 我故意添加了一个错误的 websocket 地址来重新创建此问题。 当each循环触发时,第一个 uri 会立即连接并更新 html 中的li标记。 然后,浏览器在第二个(坏(uri上挂起长达60秒,最后移动到第三个uri,该uri也立即连接。

我能够在这里重新创建此问题:http://jsfiddle.net/eXZA6/2/

爪哇语

var uris = {
    '1': 'ws://echo.websocket.org/', 
    '2': 'ws://echo.websocket.org:1234/', //Bad websocket address
    '3': 'ws://echo.websocket.org/'
};
var sockets = {};
$.each(uris, function(index, uri) {
    sockets[index] = connect(index, uri);
});
function connect(index, uri) {
    var websocket = new WebSocket(uri);
    websocket.onopen = function (evt) {
        $('li#' + index).text('Connected');
    };
    websocket.onclose = function (evt) {
        $('li#' + index).text('Closed');
    };
    websocket.onmessage = function (evt) {
    $('li#' + index).text('Received: ' + evt.data)
    };
    websocket.onerror = function (evt) {
        $('li#' + index).text('Error');
    };
    return websocket;
}

.HTML

<ul id="connection">
    <li id="1" />
    <li id="2" />
    <li id="3" />
</ul>
  • 我尝试使用 setTimeout 和其他笨拙的多线程技巧,但没有运气。
  • 奇怪的是,我期望的功能似乎适用于IE10,但不适用于Firefox或Chrome。

听起来Firefox和Chrome遵循WebSocket规范RFC6455中概述的规则,而IE10则不是。

第 4.1 节:客户端要求:

   2.  If the client already has a WebSocket connection to the remote
       host (IP address) identified by /host/ and port /port/ pair, even
       if the remote host is known by another name, the client MUST wait
       until that connection has been established or for that connection
       to have failed.  There MUST be no more than one connection in a
       CONNECTING state.  If multiple connections to the same IP address
       are attempted simultaneously, the client MUST serialize them so
       that there is no more than one connection at a time running
       through the following steps.

这实质上是说您遇到的行为是 websocket 客户端为了符合规范而需要的行为。

请注意使用"MUST"一词,这是规范文档中一个重要且定义明确的关键字。 这个关键词以及其他关键词在第2节:一致性要求中特别指出。

相关内容

  • 没有找到相关文章

最新更新