0

I'm writing my own script to connect to a websocket server with JavaScript using the WebSocket API. I'm having problems with the connection closing straight away.

Here's the client side script:

var host = 'ws://localhost:8080';
try
{
    debug.add('Connection request submitted for ' + host);
    socket = new WebSocket(host);
    debug.readyStateListener();

    debug.add('Socket request started');

    socket.onopen = function()
    {
        debug.add('Connection opened');
    }

    socket.onmessage = function(message)
    {
        debug.add('data received ' + message.data);
    }
    socket.onclose = function()
    {
        debug.add('Connection closed');
    }
}
catch(e)
{
    debug.add('WebSockets error ' + e.toString() );
}

This is the debug I receive:

Connection request submitted for ws://localhost:8080
socket readyState change to 0
Socket request started
socket readyState change to 3
Connection closed

The debug.readyStateListener() polls socket.readyState for changes. What's happening is it changes to 0 meaning the connection is opening, then straight away changes to 3 that the connection has been closed.

The server receives the connection fine but the connection is then closed straight away by the client.

I've tried it in Opera 11 with WebSockets enabled and in the latest version of Chrome. Both time's I get the same result.

I can communicate perfectly with the server through a raw connection, or simply by visiting http://localhost:8080/ in my browser this is the result:

GET / HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; U; IBM EVV/3.0/EAK01AG9/LE; en) Presto/2.9.168 Version/11.51
Host: localhost:8080
Accept: application/xhtml+voice+xml;version=1.2, application/x-xhtml+voice+xml;version=1.2, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: nl-NL,nl;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

The connection also stays alive without any flaws by sending a request through http until I end it.

Going through the JavaScript WebSocket API the server receives this request:

GET / HTTP/1.1
Host: localhost:8080
Origin: http://localhost
Upgrade: WebSocket
Sec-WebSocket-key1: L58(b Q]'9 4 9\  0 *+ 6 a4
Connection: Upgrade
Sec-WebSocket-Key2: \+ 1 5d/9541840N*4

My last guess would be Connection: upgrade or Upgrade: WebSocket not being supported properly by the client. To me it would be more logical to receive Connection: keep-alive but I have no idea how to reslove this.

Chris
  • 51
  • 1
  • 11
  • Alternative: Have you looked at [socket.io](http://socket.io)? – josh3736 Oct 26 '11 at 15:23
  • 1
    "in the latest version of Chrome" - Chrome uses the new draft which does not use `Sec-WebSocket-key1` and `-key2` but instead a base 64 encoded version. That draft version is a complete overhaul and is the version that's going to be the final one. You'd better implement that one. It's more complex, but the version you're implementing is deprecated. Anyhow, if you're still using the old draft - are you calculating the response key correctly? Could you post the handshake response key code? – pimvdb Oct 26 '11 at 15:37

0 Answers0