2011-10-26 13 views
0

WebSocket APIを使用してJavaScriptを使用してwebsocketサーバーに接続するための独自のスクリプトを作成しています。私はすぐに接続を閉じることに問題があります。変更JavaScript WebSocketすぐに接続を閉じる

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:

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

これは私が受け取るデバッグは次のとおりです。

は、ここでクライアント側のスクリプトです。何が起こっているのかは、接続が開かれていることを意味する0に変化し、その後すぐに接続が閉じられたことが3に変わります。

サーバーは接続を正常に受信しますが、クライアントは接続をすぐに閉じます。

WebSocketを有効にして、最新バージョンのChromeでOpera 11で試しました。両方の時間は私は同じ結果を得る。

私は生の接続を介してサーバーと完全に通信することができ、または単に私のブラウザで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クライアントによって適切にサポートされていません。私にはコネクションを受け取る方が論理的です。キープアライブですが、これを再現する方法はわかりません。

+0

代替:[socket.io](http://socket.io)を見ましたか? – josh3736

+1

"Chromeの最新バージョンでは" - Chromeは、 'Sec-WebSocket-key1'と' -key2'を使わず、代わりにbase64でエンコードされた新しいドラフトを使用します。そのドラフト版は完全なオーバーホールであり、最終版になる予定です。あなたはそれを実装する方がいいでしょう。もっと複雑ですが、実装しているバージョンは廃止予定です。とにかく、まだ古いドラフトを使用している場合 - 応答キーを正しく計算していますか?ハンドシェイク応答キーコードを投稿できますか? – pimvdb

答えて

0

接続は常に行われますが、通過するハンドシェイクに応じて保持または削除されます。 ChromeのバージョンとWebSocketサーバーの両方が同じバージョンのWebSocket Specificationドラフトを実装していることを確認する必要があります。

これ以外の場合、接続は拒否されます。

+0

node.jsネットで送信されたヘッダーをどのように変更することができますか?私は送信されたハンドシェイクを取得する方法を見つけることさえできません。 – Chris

+0

node.jsで何を使用していますか? socket.io? – Asti

関連する問題