2012-03-13 12 views
22

2つ以上の異なるnode.jsアプリケーションサーバー間でソケットベースのP2P通信を有効にしたいと思います。私はsocket.ioを使用して、指定されたサーバーとそれが提供するWebアプリケーション間のすべての通信を処理しますが、私が探しているのはサーバー間の通信方法です。node.jsサーバー上で(server-side)実行しているsocket.ioクライアントを設定することはできますか?

私は当初、それはこのようなものと同じくらい簡単だろうと想定していた

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

しかし、それはサーバー側socket.io実装は唯一、「接続」の方法を提供していませんが判明したとして、リスニングメソッド。

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

+3

はあなたが後にしているだけで何のクライアントライブラリですか? https://github.com/LearnBoost/socket.io-client – pimvdb

+0

これをnode.jsアプリにプラグインすることはできますか?どうやってそれを要求するのですか?私が知る限り、ブラウザベースの使用のために設計されています。 – Myk

+0

このs/oスレッドを参照してください:http://stackoverflow.com/questions/6785979/socket-io-client-issues-require-socket-io-client-js-not-working – Myk

答えて

51

上記のコメントの@pimvdbのおかげで、私は実行可能な解決策を得ました。

基本的に、npmがインストールするsocket.ioライブラリは、socket.io-clientという別のモジュールに依存しています。標準のsocket.ioインストールでは、これはnode_modules/socket.io/node_modules/socket.io-clientにインストールされます

しかし、 "npm install socket.io-client"と言うこともできます。独自のファーストクラスの市民図書館。

var client = require("socket.io-client"); 
client.connect("http://myendpoint.com:3000/whatever"); 
client.emit("test", "foo"); 

、すべての作品:

次に、あなたの使い方は次のようになります。

だから、感謝の男!

+7

あなたが見つけた解決策を投稿するために+1 – pimvdb

+9

'var client = require(" socket.io-client "); var socket = client.connect( "http:// localhost:3000"); ソケット。emit( "test"、 "foo"); ' これは私のために働いた。 – nullbuilt

2

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

+1

私はそれをすべて理解しています。状況は、私はブラウザ<->ノード通信がすでに確立されており、API全体が構築されたsocket.ioベースのWebアプリケーションを持っているということです。 node.jsのローカルインスタンスをスピンアップしてArduinoに接続し、それを既存のsocket.ioセッションのもう1つのアイテムとして接続できるようにしたかったのです。それは理にかなっていますか? – Myk

+0

もちろん、興味深いと思う。がんばろう。 – Mark

6

ただ、明確化のため、これはリスナーと可能性のイベントを発する(とせずに、再び既にインストールされているモジュールをインストール)すると例です

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"); 
}); 
+0

私はsocketsの新機能を使用しています.client.emit( "test"、 "foo") "foo"がストリームでテストがblobなので、この要求を処理する方法は、このclient.emit( "blobs"ストリーム)より明確に私はサーバー側のスクリプト(server.js)を探して、リッスンヘルプのためのポータルを設定しています!! –

関連する問題