3

webkit+node.jsフレームワークであるapp.jsを使ってチャットアプリを開発しています。だから私はnode.jsとブリッジされたWebブラウザ環境を両側に持っています。ファイル転送機能を Skype に少し似たものにしたいと考えています。

したがって、最初のアイデアは次のとおりです。

1.クライアントをメインサーバーに接続します。

2.各クライアントは反対の IP を取得します。

3. 両方のクライアントでソケットまたは Websocket サーバーを開始し、相互に接続します。

4.送信者はファイルを読み取り、受信者に送信します。

質問は:

1.一方のクライアントがもう一方のクライアントを「見る」ことができるかどうかはよくわかりません。

2.ファイルはバイナリ データですが、websockets はテキスト メッセージ用に作成されているため、何らかのコーディング/デコードが必要です。Base 64 について考えましたが、「オーバーヘッド」情報が 30% あります。だから私はもっと効率的なものが必要です(ベース128?)。

3.websocket を使用するのが効率的でない場合、代わりに TCP ソケットを使用する必要がありますか? それらを使用することにした場合、どのような問題が発生する可能性がありますか?

ええ、node2nodeBinaryJSについては知っていますが、それらを使用する必要があるかどうかはわかりません。そして、私は本当に自分で何かをするのです。

4

1 に答える 1

2

OK、コミュニケーションは次のようになります。

(C->N)<->N<->(N->C)

(...) は 1 つのクライアントのマシンにインストールされます。N はノード サーバー、C は Web クライアントです。

  1. これはあなたの管理外です。一部のファイル共有アプリは、中央サーバーからクライアントにテスト パケットを送信して、ポートが開いているかどうか、NAT ルールが正しく構成されているかどうかなどを確認します。クライアントは特定のポートで独自のサーバーを起動し、マスター サーバーはテスト接続を作成する可能性があります。これらのサーバーは、ファイルを送信できることを他のクライアントに伝える前に、サーバーが正しく起動され、Web に対して開いているかどうかを確認します。

  2. Websocket は、サーバーから Web GUI へのステータス メッセージと、一般的なクライアント間の通信に最適です。実際のファイル転送には、TCP ソケットを使用します。次の回答を参照してください。一方、base64 エンコーディングは実際には遅いプロセスではありません。試してみて、そのパフォーマンスをベンチマークし、決定を裏付けるデータを使用して決定してください。

  3. 組み合わせを使用できます: サーバーから Web GUI への Websocket ですが、サーバー自体の間の TCP 通信です。Node で TCP サーバー (およびストリーム) をセットアップするのは難しくありません。デメリットは見当たりません。node2nodeTCP は既に組み込まれているため、これらのサーバーにインストールするよりも実際には複雑ではないかもしれません。

于 2012-08-15T15:41:35.760 に答える