web-dev-qa-db-ja.com

node.jsサーバーで(サーバー側で)実行されているsocket.ioクライアントをセットアップすることは可能ですか?

2つ以上の異なるnode.jsアプリケーションサーバー間でソケットベースのp2p通信を有効にしたいのですが。私はsocket.ioを使用して、特定のサーバーとそれが提供するWebアプリケーションとの間のこのようなすべての通信を処理していますが、私が探しているのは、サーバー間で通信する方法です。

私は当初、次のようなものと同じくらい簡単だと思っていました。

var io = require("socket.io");
var socket = io.connect("my remote endpoint");

ただし、サーバー側のsocket.io実装は「接続」メソッドを提供せず、リッスンメソッドのみを提供することが判明しました。

どうしてこれなの?ノードアプリケーションサーバーを他の場所で実行されているsocket.ioサーバーのクライアントとして扱うことができないのはなぜですか?この機能を実現する方法はありますか?

24
Myk

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

そして、すべてが機能します。

だから、ありがとう!

57
Myk

明確にするために、これはリスナーとイベントを発行する可能性がある例です(そして、すでにインストールされているモジュールを再度インストールせずに)

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");
}); 
6
Luca Rainone

サーバー間通信のためにsocket.ioをフルスピードで使用する前に、socket.ioはサーバー間通信インフラストラクチャーとして設計されています。私はそれがP2Pサーバーのもののための最良の解決策であるとは確信していません。さらに、サーバー間を実行する場合は、Websocketを実行しないのはなぜですか?ノードにはさまざまなWebSocketモジュールがあります-例: https://github.com/einaros/ws

2
Mark