2つ以上の異なるnode.jsアプリケーションサーバー間でソケットベースのp2p通信を有効にしたいのですが。私はsocket.ioを使用して、特定のサーバーとそれが提供するWebアプリケーションとの間のこのようなすべての通信を処理していますが、私が探しているのは、サーバー間で通信する方法です。
私は当初、次のようなものと同じくらい簡単だと思っていました。
var io = require("socket.io");
var socket = io.connect("my remote endpoint");
ただし、サーバー側のsocket.io実装は「接続」メソッドを提供せず、リッスンメソッドのみを提供することが判明しました。
どうしてこれなの?ノードアプリケーションサーバーを他の場所で実行されているsocket.ioサーバーのクライアントとして扱うことができないのはなぜですか?この機能を実現する方法はありますか?
OK、上記のコメントの@pimvdbのおかげで、実行可能な解決策があります。
基本的に、npmがインストールするsocket.ioライブラリは、socket.io-clientと呼ばれる別のモジュールに依存しています。標準のsocket.ioインストールでは、これはnode_modules/socket.io/node_modules /socket.io-clientにインストールされます。
ただし、「npm installsocket.io-client」と言って、独自の第一級市民ライブラリとしてインストールすることもできます。
次に、使用法は次のようになります。
var client = require("socket.io-client");
var socket = client.connect("http://myendpoint.com:3000/whatever");
socket.emit("test", "foo");
そして、すべてが機能します。
だから、ありがとう!
明確にするために、これはリスナーとイベントを発行する可能性がある例です(そして、すでにインストールされているモジュールを再度インストールせずに)
var io = require('socket.io/node_modules/socket.io-client');
client = io.connect('http://'+CONFIG.Host+':'+CONFIG.port);
client.on('connect',function() {
client.emit("test","foo");
});
サーバー間通信のためにsocket.ioをフルスピードで使用する前に、socket.ioはサーバー間通信インフラストラクチャーとして設計されています。私はそれがP2Pサーバーのもののための最良の解決策であるとは確信していません。さらに、サーバー間を実行する場合は、Websocketを実行しないのはなぜですか?ノードにはさまざまなWebSocketモジュールがあります-例: https://github.com/einaros/ws