简体   繁体   中英

Websockets not working

I have the following code in javascript:

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();

The problem is that in Firefox, the connection is closed after sending the messages, and reopened due to the command on the onclose event. If I try to send only one message on onopen, the connection keeps opened, but if I try to send more than one message, the connection shut down. This issue appears only in Firefox, not in Chrome, not in IE, not in Safari.

Can someone help me? In other browsers like IE or Chrome, once the connection is created, it keep opened until I leave the page. I have the 40.0.3v of Firefox

Try this example:

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);

Here is a JSFidlle

It may be that your support var is not behaving as you expect. The following code works in FireFox without closing the connection:

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


  • You can use the tool on Websocket.org to make sure websockets are working correctly in your browser.
  • Or (although your issue is with FF) you can use the steps listed here to debug websockets.

Try it.

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

if (WS){
    var websocket = new WS("wss://myserver/mychannel");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM