2013-02-18 7 views
5

私はNodeJSの初心者です。私は、Golangのwebsocketパッケージで実装されているエコーサーバを持っていると仮定してください:ノードgsクライアントのwebSocketサーバーへのアクセス

 
package main 

import (
    "code.google.com/p/go.net/websocket" 
    "log" 
    "net/http" 
) 

func EchoServer(ws *websocket.Conn) { 
    var msg string 
    websocket.Message.Receive(ws, &msg) 
    log.Printf("Message Got: %s\n", msg) 
    websocket.Message.Send(ws, msg) 
} 

func main() { 
    http.Handle("/echo", websocket.Handler(EchoServer)) 
    err := http.ListenAndServe(":8082", nil) 
    if err != nil { 
     panic(err.Error()) 
    } 
} 

nodejsクライアントコードはどのように見えますか?

+0

ブラウザのWebSocketではなくnode.jsを使用していますか? – tjameson

+0

ブラウザはwebsocketサービスを使用できます。しかし、私が興味を持っているのは、スタンドアロンのnodejsアプリケーションがそれを消費できるかどうかです。 –

答えて

7

私はthisがあなたが探しているものだと思います。サーバーのコードを使用した簡単な例では:

var WebSocketClient = require('websocket').client; 

var client = new WebSocketClient(); 

client.on('connectFailed', function(error) { 
    console.log('Connect Error: ' + error.toString()); 
}); 

client.on('connect', function(connection) { 
    console.log('WebSocket client connected'); 
    connection.on('error', function(error) { 
     console.log("Connection Error: " + error.toString()); 
    }); 
    connection.on('close', function() { 
     console.log('echo-protocol Connection Closed'); 
    }); 
    connection.on('message', function(message) { 
     if (message.type === 'utf8') { 
      console.log("Received: '" + message.utf8Data + "'"); 
     } 
    }); 

    connection.sendUTF("Hello world"); 
}); 

client.connect('ws://127.0.0.1:8082/echo', "", "http://localhost:8082"); 

すると、この作業を取得するには、lib/WebSocketCLient.jsでWebsocketClientコードを変更する必要があります。これらの行をコメントアウト(私のマシン上に線299から300):あなたが提供するのWebSocketライブラリは「SEC-のWebSocket-プロトコル」ヘッダを送信していないよう何らかの理由

 //this.failHandshake("Expected a Sec-WebSocket-Protocol header."); 
     //return; 

、または少なくともクライアントそれを見つけることはありません。私はあまりにも多くのテストをしていませんが、おそらくどこかにバグレポートを提出するべきです。ここで

が行くクライアントを使用した例です:WebSocketのノードライブラリの作者として

package main 

import (
    "fmt" 
    "code.google.com/p/go.net/websocket" 
) 

const message = "Hello world" 

func main() { 
    ws, err := websocket.Dial("ws://localhost:8082/echo", "", "http://localhost:8082") 
    if err != nil { 
     panic(err) 
    } 
    if _, err := ws.Write([]byte(message)); err != nil { 
     panic(err) 
    } 
    var resp = make([]byte, 4096) 
    n, err := ws.Read(resp) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println("Received:", string(resp[0:n])) 
} 
+1

正解以下のように...もしあなたがこの方法で幸運のアップグレードをしたら –

18

、私はあなたがいないの順序でのWebSocketノードのライブラリのコードを変更する必要がないことを保証することができますサブプロトコルを使用します。

上記のコード例は、connect()関数のsubprotocolパラメータに空の文字列を渡していることを示しています。サブプロトコルを使用しない場合は、JavaScriptのヌル値を2番目のパラメータとして渡すか、空の配列を渡す必要があります(ライブラリーは、望ましく降順に複数のサポートされたサブプロトコルをリモートサーバーに提示できますが、空ではありません)文字列。

+0

これはどんなアップフォースをも持っていなかったのが大好き.... – jtromans

+0

これは受け入れられた答えなのですか? –

+0

@ brian-mckelveyありがとうございます。私は基本的な認証が必要ですwsのURL、どのようにそれを行うには? ws:// f68a8efd-dc55-405d-b1f0-b4433477d52a:[email protected]:8011/v2/ws/websocket このように試しましたが、エラーが発生しました。 接続エラー:401 レスポンスヘッダフォロー: WWW認証:サーバが非101の状態で応答基本レルムは= 日付を「認証が必要」:木、2016年9月8日午前6時20分03秒GMT content-length:25 コンテンツタイプ:text/plain; charset = utf-8 – Dibish

関連する問題