3

node.js を使用して websocket サーバーとクライアントを実装しています。二人の握手はこんな感じ。

リクエスト URL: ws://localhost:8015/

リクエスト方法:GET

ステータス コード: 101 スイッチング プロトコル

リクエスト ヘッダー

Cache-Control: no-cache
Connection: Upgrade
Cookie: SQLiteManager_currentLangue=2
Host: localhost:8015
Origin: http:/localhost:8080
Pragma: no-cache
Sec-WebSocket-Extensions: x-webkit-deflate-frame
Sec-WebSocket-Key: A/knWtXFtTa5V6po8XOfjg==
Sec-WebSocket-Protocol: echo-protocol
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36

応答ヘッダー

Connection: Upgrade
Origin: http:/localhost:8080
Sec-WebSocket-Accept: 5OUv+g5mBPxVDug4etJfGX4lxIo=
Sec-WebSocket-Protocol: echo-protocol
Upgrade: websocket

サーバーはクライアントから送信されたメッセージを取得しています(コンソールにメッセージを記録しています)が、サーバーがメッセージを送信するときにクライアントの onmessage イベントが発生しません。私を混乱させるもう1つのことは、接続が開かれるとすぐに、クライアントのonmessageイベントが1回だけ発生することです。

助けてください...サーバー上のメッセージをクライアントにエコーバックしようとしています。

編集:

これは、websocket クライアントでイベントを処理する方法です...

html5WebSocketClient.connect = function(){
     if(window.WebSocket != undefined){
         if(connection.readyState == undefined || connection.readyState > 1)
             connection = new WebSocket('ws://localhost:8015/','echo-protocol');
     }
     if (window.MozWebSocket) {
          window.WebSocket = window.MozWebSocket;
     }

 connection.onopen = html5WebSocketClient.onOpen(event);
 connection.onmessage = html5WebSocketClient.onMessage(event);
 connection.onclose = html5WebSocketClient.onClose(event); 
 connection.onerror = html5WebSocketClient.onError(event);

};

html5WebSocketClient.onOpen = function(event)
{
    $('#some_label').text("Connected");
};

html5WebSocketClient.onClose = function(event)
{
    $('#some_label').text("Disconnected");
};

html5WebSocketClient.onError = function(event)
{
    $('#some_label').text("Error");
};

//This is only getting fired when connection opens
html5WebSocketClient.onMessage = function(message)
{
    if(message.data != undefined)
        {
        alert($.parseJSON(message.data));
    }
};

//Server is getting this message
html5WebSocketClient.sendMessage = function()
{
   var message = {"name": value, "name": value};
   connection.send(JSON.stringify(message));
};

そして、これが私がサーバーを実装した方法です..

var http = require('http');
var WebSocketServer = require('websocket').server;

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js From HTML5\n');
}).listen(8015, "127.0.0.1");

wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

wsServer.on('request', function(request) {

    var connection = request.accept('echo-protocol', request.origin);
    console.log((new Date()) + ' Connection accepted.');
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data);
            connection.send(message.utf8Data); //Client is not getting this message..?
        }
    });
    connection.on('close', function(reasonCode, description) {
        console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
    });
});
4

1 に答える 1