JavaScript WebSocket немедленно закрывает соединение - PullRequest
0 голосов
/ 26 октября 2011

Я пишу свой собственный скрипт для подключения к серверу websocket с помощью JavaScript с помощью API WebSocket. У меня проблемы с закрытием соединения сразу.

Вот скрипт на стороне клиента:

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

Это отладка, которую я получаю:

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

debug.readyStateListener () опрашивает socket.readyState на предмет изменений. Происходит изменение в 0, означающее, что соединение открывается, а затем сразу 3 в том, что соединение было закрыто.

Сервер получает соединение в порядке, но соединение сразу закрывается клиентом.

Я пробовал это в Opera 11 с включенными WebSockets и в последней версии Chrome. Оба раза я получаю один и тот же результат.

Я могу отлично общаться с сервером через необработанное соединение, или просто посетив http://localhost:8080/ в моем браузере, это результат:

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

Соединение также сохраняется без каких-либо недостатков, отправляя запрос через http, пока я не завершу его.

Проходя через JavaScript WebSocket API, сервер получает этот запрос:

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

Моим последним предположением будет Connection: upgrade или Upgrade: WebSocket не поддерживается клиентом должным образом. Для меня было бы более логично получить Connection: keep-alive, но я понятия не имею, как восстановить это.

1 Ответ

0 голосов
/ 26 октября 2011

Соединения всегда выполняются, но сохраняются или сбрасываются в соответствии с проходящим рукопожатием. Вам необходимо убедиться, что ваша версия Chrome и ваш сервер WebSocket поддерживают одинаковую версию черновика спецификации WebSocket.

В противном случае соединение будет отклонено.

...