Myślę, że this jest tym, czego szukasz. Krótki przykład przy użyciu kodu serwera:
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");
Aby to zadziałało, musisz zmodyfikować kod WebsocketClient w lib/WebSocketCLient.js
. Komentarz te linie na zewnątrz (linie 299-300 na moim komputerze):
//this.failHandshake("Expected a Sec-WebSocket-Protocol header.");
//return;
Z jakiegoś powodu biblioteka websocket podałeś nie wydaje się, aby wysłać „Sec-websocket-Protocol” nagłówek, albo przynajmniej klienckie nie znajduje go. Nie zrobiłem zbyt wiele testów, ale raport o błędzie powinien być gdzieś zgłoszony.
Oto przykład przy użyciu klienta 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]))
}
Czy na pewno masz na myśli plik node.js, a nie przeglądarkę WebSockets? – tjameson
Przeglądarka może korzystać z usługi websocket. Ale interesuje mnie to, czy samodzielna aplikacja nodejs może ją konsumować. –