1

次のような node.exe で実行している Node.js のコードがいくつかあります。

// http://www.zhihua-lai.com/acm
// 09-Feb-2013

var sys = require('sys');
var net = require('net');
var sockets = [];

var svr = net.createServer(function(sock) {
    sys.puts('Connected: ' + sock.remoteAddress + ':' + sock.remotePort); 
    sock.write('Hello ' + sock.remoteAddress + ':' + sock.remotePort + '\n');
    sockets.push(sock);

    sock.on('data', function(data) {  // client writes message
        if (data == 'exit\n') {
            sys.puts('exit command received: ' + sock.remoteAddress + ':' + sock.remotePort + '\n');
            sock.destroy();
            var idx = sockets.indexOf(sock);
            if (idx != -1) {
                delete sockets[idx];
            }
            return;
        }
        var len = sockets.length;
        for (var i = 0; i < len; i ++) { // broad cast
            if (sockets[i] != sock) {
                if (sockets[i]) {
                    sockets[i].write(sock.remoteAddress + ':' + sock.remotePort + ':' + data);
                }
            }
        }
    });

    sock.on('end', function() { // client disconnects
        sys.puts('Disconnected: ' + data + data.remoteAddress + ':' + data.remotePort + '\n');
        var idx = sockets.indexOf(sock);
        if (idx != -1) {
            delete sockets[idx];
        }
    });
});

var svraddr = '127.0.0.1';
var svrport = 8080;

svr.listen(svrport, svraddr);
sys.puts('Server Created at ' + svraddr + ':' + svrport + '\n');

サーバーを実行したら、さらに 2 つのターミナル クライアントを開き、NetCat または telnet を使用できます。どちらかのクライアント ウィンドウに情報を入力すると、その情報が両方の NetCat ウィンドウにブロードキャストされます。私が抱えている問題は、サーバーへの JavaScript 接続を作成しようとするときです。

<!DOCTYPE html>
<html>
<head>
<title>sample</title>
<script type="text/javascript">
var connection = new WebSocket('ws://localhost:8080');
console.log(connection);
// When the connection is open, send some data to the server
connection.onopen = function () {
    connection.send("a"); // Send the message 'Ping' to the server
    console.log("send data...");
};
</script>
<body>
</body>
</html>

何が起こるかというと、connection の readyState が 0 であり、Google Chromes JavaScript がサーバーへの接続を開くことができなかったことを示しています。接続の問題を回避するために Windows ファイアウォールがオフになっていることと、サーバーが NetCat で正常に動作していることを確認しました。Nodejs をさらに進めて、JavaScript をサーバーに接続したいと考えていますが、それがどのように行われるのか、またはコードで何を変更する必要があるのか​​はまだわかりません。

前もって感謝します...

4

1 に答える 1

1

Websocket は tcp/ip を使用しますが、Websocket サーバーは単なる標準の tcp サーバーではありません。

RFC6455は、クライアントとサーバーが使用する必要がある websocket プロトコルを定義します。接続を開くには、ハンドシェークのセクションを参照してください。後でメッセージを送受信するには、データ フレーミング セクションを参照してください。

このプロトコルを実装する独自のサーバーを実装するか、統合できる既存のサードパーティ サーバーを見つける必要があります。既存のサーバーを検討したい場合は、wsが有望に見えます。

于 2013-05-20T08:01:28.230 に答える