HTML5 Websocket within Webworker

You must listen for the onopen websocket event before sending your first message.

socket.onopen = function(){
    // send some message   
};

Try this:

var WebSocketStateEnum = {CONNECTING: 0, OPEN: 1, CLOSING: 2, CLOSED: 3};

var wsChannel;
var msgQueue = [];

// Using like this:
sendMessage(_ => {
    wsChannel.send('message...'); // This will wait until the connection open, unless it is already opened
});

function sendMessage(task) {
    if (!wsChannel || wsChannel.readyState != WebSocketStateEnum.OPEN) {
        msgQueue.push(task);
    } else {
        task();
    }

    if (!wsChannel) {
        wsChannel = new WebSocket('ws://your-url');
        wsChannel.onopen = function() {
            while (msgQueue.length > 0) {
                msgQueue.shift()();
            }
        }
        wsChannel.onmessage = function(evt) {
            // message received here
        }

        wsChannel.onclose = function(evt) {
            wsChannel = null;
        }

        wsChannel.onerror = function(evt) {
            if (wsChannel.readyState == WebSocketStateEnum.OPEN) {
                wsChannel.close();
            } else {
                wsChannel = null;
            }
        }
    }
}