6

私はNodeJSの初心者です。Golangのwebsocketパッケージで実装されたエコーサーバーがあると仮定します。

パッケージメイン

輸入 (
    "code.google.com/p/go.net/websocket"
    "ログ"
    「net/http」
)。

func EchoServer(ws * websocket.Conn){
    var msg string
    websocket.Message.Receive(ws、&msg)
    log.Printf( "メッセージを取得しました:%s \ n"、msg)
    websocket.Message.Send(ws、msg)
}

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

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

4

2 に答える 2

23

WebSocket-Nodeライブラリの作成者として、サブプロトコルを使用しないためにWebSocket-Nodeライブラリコードを変更する必要がないことを保証できます。

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

于 2013-12-19T01:15:04.913 に答える
9

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

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");

これを機能させるには、のWebsocketClientコードを変更する必要がありますlib/WebSocketCLient.js。これらの行をコメントアウトします(私のマシンの行299-300):

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

何らかの理由で、提供したWebSocketライブラリが「Sec-Websocket-Protocol」ヘッダーを送信していないようであるか、少なくともクライアントがそれを見つけられません。私はあまりテストをしていませんが、バグレポートはおそらくどこかに提出されるべきです。

Goクライアントを使用した例を次に示します。

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]))
}
于 2013-02-19T16:07:54.240 に答える