我正在編寫自己的腳本以使用WebSocket API連接到使用JavaScript的websocket服務器。我在連接關閉時遇到了問題。JavaScript 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
我最後的猜測是連接:升級或升級:WebSocket的不被客戶適當的支持。對我來說,接收連接會更合乎邏輯:保持活躍,但我不知道如何重新使用此連接。
替代方法:你看過[socket.io](http://socket.io)? – josh3736
「在最新版本的Chrome中」 - Chrome使用不使用「Sec-WebSocket-key1」和「-key2」的新草稿,而是使用基本64編碼版本。該草案版本是徹底的檢修,並且是最後一個版本。你最好實施那個。這更復雜,但您正在實施的版本已被棄用。無論如何,如果你仍然在使用舊草案 - 你是否正確計算了響應鍵?你可以發佈握手響應密鑰代碼嗎? – pimvdb