2015-09-22 2 views
1

У меня есть следующий код JavaScript:WebSockets не работает

function ConnectWebSocket() { 
if ("WebSocket" in window) { 
    myWebsocket = new WebSocket("wss://myserver/mychannel"); 
    myWebsocket.onmessage = function(evt) { 
     alert("onmessage"); 
    } 
    myWebsocket.onopen = function() { 
     alert("onopen"); 
     myWebsocket.send("msg0"); 
     myWebsocket.send("msg1"); 
     myWebsocket.send("msg2"); 
    } 
    myWebsocket.onclose = function() { 
     alert("onclose"); 
     ConnectWebSocket(); 
    } 
    } else { 
    // Do something if there is no websockets support 
    } 
} 
ConnectWebSocket(); 

Проблема заключается в том, что в Firefox, соединение закрывается после отправки сообщения, и вновь из-за команды на OnClose события. Если я попытаюсь отправить только одно сообщение в onopen, соединение будет открыто, но если я попытаюсь отправить несколько сообщений, соединение отключится. Эта проблема появляется только в Firefox, а не в Chrome, а не в IE, а не в Safari.

Может кто-нибудь мне помочь? В других браузерах, таких как IE или Chrome, после создания соединения он остается открытым до тех пор, пока я не покину страницу. У меня есть 40.0.3v из Firefox

+0

проверить это [http://stackoverflow.com/questions/31627450/websocket-fails-in-firefox](http://stackoverflow.com/questions/31627450/websocket-fails-in-firefox) – kakajan

+0

Привет, kakajan, эта ссылка подходит для меня, но это обычное действие. Мне нужно, чтобы он мог быть установлен кодом. Это возможно? Не могли бы вы мне помочь? Спасибо. – Manel

+0

** API WebSockets (и базовый протокол) все еще находится в активной разработке, и в настоящее время существует множество проблем с совместимостью между браузерами (и даже между разными версиями одного и того же браузера). ** Я получаю это с веб-сайта [mozilla ] (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#Examples) Проверьте ссылку, есть примеры WebSocket – kakajan

ответ

0

Возможно, ваш support var не ведет себя так, как вы ожидаете. Следующий код работает в FireFox без закрытия соединения:

function ConnectWebSocket() { 

    if ("WebSocket" in window) { 
     myWebsocket = new WebSocket("ws://echo.websocket.org/"); 
     myWebsocket.onmessage = function (evt) { 
      alert("onmessage"); 
     } 
     myWebsocket.onopen = function() { 
      alert("onopen"); 
      myWebsocket.send("a test message"); 
     } 
     myWebsocket.onclose = function() { 
      alert("onclose"); 
      ConnectWebSocket(); 
     } 
    } else { 
     // Do something if there is no websockets support 
    } 
} 
ConnectWebSocket(); 

Example Fiddle


  • Вы можете использовать tool on Websocket.org, чтобы убедиться, что WebSockets являются правильно работать в вашем браузере.
  • Или (хотя ваша проблема связана с FF) вы можете использовать steps listed here для отладки веб-сайтов.
2

Попробуйте этот пример:

var url = "ws://echo.websocket.org"; 

if (!window.WebSocket) alert("WebSocket not supported by this browser"); 

var myWebSocket = { 
    connect: function() { 
     var location = url 
     this._ws = new WebSocket(location); 
     this._ws.onopen = this._onopen; 
     this._ws.onmessage = this._onmessage; 
     this._ws.onclose = this._onclose; 
     this._ws.onerror = this._onerror; 
    }, 

    _onopen: function() { 
     console.debug("WebSocket Connected"); 
    }, 

    _onmessage: function (message) { 
     console.debug("Message Recieved: " + message.data); 
    }, 

    _onclose: function() { 
     console.debug("WebSocket Closed"); 
     kiosk.connect(); 
    }, 

    _onerror: function (e) { 
     console.debug("Error occured: " + e); 
    }, 

    _send: function (message) { 
     console.debug("Message Send: " + message); 
     if (this._ws) this._ws.send(message); 
    } 
}; 

myWebSocket.connect(); 
setInterval(function() { 
    myWebSocket._send('msg1'); 
}, 5000); 

Вот JSFidlle

+0

Здравствуйте, kakjan, здесь вы можете увидеть мой консольный журнал : Сокет открыт. Состояние = 1 Розетка закрыта. Состояние = 3 Подключение к wss: // myWebsocketServer/MyChannel был прерван во время загрузки страницы. И эти 3 предложения повторяются каждые 2 секунды. – Manel

+0

@Manel я обновил свой ответ, попробовал, я добавил свой пример в веб-виде, который я использовал в своих проектах, есть также ссылка jsfiddle, я попробовал ее в firefox, chrome, safari, без проблем. – kakajan

+0

Привет, какаджан, спасибо за ваш ответ, но я боюсь, что все еще не работает на firefox. Вы можете попробовать использовать тот же код с этим URL-адресом «wss: //pre-ws.sureact.com: 443/myChannel», и вы увидите файл console.log, который я получаю.Пожалуйста, обратите внимание, что у меня есть «network.websocket.extensions.permessage-deflate; true» в «about: config». Привет, Manel – Manel

0

Попробуйте.

var WS = window.WebSocket || window.MozWebSocket;; 

if (WS){ 
    var websocket = new WS("wss://myserver/mychannel"); 
} 
Смежные вопросы