socket.ioとhttpサーバーを別々のプロセスに配置するが、同じホストとポートを使用する方法は?

ウェブ上の例のほとんどは次のようなものを提供します:

var app = require('express').createServer()
  , io = require('socket.io').listen(app);

app.listen(80);

そのためには、httpサーバとソケットサーバの両方を同じプロセスにする必要があります。

ある程度のサイズのWebサイトを作っている場合は、2つのサーバーを分離したいが、同じドメインとポートを使用することができます。どのようにして1つは行きますか?

0
あなたは文字通り彼らが別々のサーバ上にあることを意味しますか?あるいは、2つのサービスを分離することを意味しましたか?それは答えに大きな影響を与えます。プロセスを分割することは、おそらくnode.jsの全体の精神に反して有用ではないと考えましたか?特定のブロック/時間を食べる作業がある場合は、1つのポートでリッスンしようとする2つのプロセスを処理する代わりに、それらをファーム化し、それを可能にするいくつかのフォワードを設定してください。
追加された 著者 Kato,
まあ、すべてのスレッドに単一のスレッドを使用するノードの理想的な見解と、複数のスレッドが現代のデュアル/クワッド/ googleplexプロセッサをより有効に活用できるという事実とのあいだにはあいまいさがあります。しかし、基本的には、私がアプローチを突き詰めると、操作が長すぎると同時にブロックされない限り、すべてのスレッドを使用します。正直なところ、あなたのアプローチを評価する資格は本当にありません。ノードのデザインに代わって話すこともできます。私は単にあなたの部分の大きな画像の評価を刺激するいくつかのプロンプトを提案していました:)
追加された 著者 Kato,
Apacheから呼び出されると、PHPは呼び出しごとに新しいスレッドを取得します。コマンドラインから呼び出されると、PHPは呼び出しごとに新しいスレッドを取得します。あなたが接続プールとリスナーとしてApacheプロセスを数えない限り、PHPリスナー自体はありません。ノードは nginx のようなアプローチを使用しますが、これはプロセスや呼び出しごとに別のスレッドを開始しません(ノード/ nginxは非同期ですが、マルチスレッドではありません)、これはリソースが驚くほど高速で軽量です。
追加された 著者 Kato,
@カトー、私はより具体的であることを考えていたが、それに反対した。違いはどれほど大きいのですか?この質問に関連するnode.jsの精神についてさらに詳しく説明しますか?ノードのシングルスレッドアーキテクチャでは、サービングファイルとサービングデータの分離が不可欠です。
追加された 著者 Bijou Trouvaille,
あなたのご意見ありがとうございます。私が見ているように、phpのアプローチとノードのアプローチの違いは、phpはすべてのスレッドに対して1つのスレッドを使用しますが、各クライアントには1つを与えます。ノードは各懸念事項に1つのスレッドを与え、すべてのクライアントに1つのスレッドを与えます。しかし、これは単なる理論であり、実際には、あなたが言及したように、状況の詳細によって要求事項が決定されます。
追加された 著者 Bijou Trouvaille,

1 答え

まず、質問を明確にするのを手伝ってください。

あなたがしたいことは、NodeHTTP WebサーバーとSocketIO Clientの両方を別々のマシン上で実行していても、同じドメイン(非サブドメイン)経由でアクセスできることです。

これは非常に難しく、扱いにくくなるでしょう。あなたはそのボックスに複数のIPを要求し、それに応じてリクエストをマップするためにhaproxyを使用します

ロードバランシングの場合は、スタックについての情報が必要です。

私は、ラウンドロビンを介してロードバランシングされているいくつかのサーバー(5インファクト)を持っているので、私はこれを私のDNSレコードに持っています

relay.domain.com: {
    A : 10.0.0.1,
    A : 10.0.0.2,
    A : 10.0.0.3,
    A : 10.0.0.4
}

また、 master.domain.com(10.0.0.0)にマスターサーバーがあり、socket.ioクライアントからのすべての接続は relay.domain.com にあり、接続は4台のサーバーに負荷分散されます。

4つのサーバーのそれぞれがポート80上の接続をリストしていますが、すべてがマスターサーバーへの socket.io-client 接続を作成し、すべての要求をマスターに送信すると、そのデータをアナウンスする場合は、そのデータをすべてのリレーサーバーに送り返し、すべてのリレーサーバーがクライアントリストをアナウンスします。

0
追加された
それに感謝して、それはかなり質問に答えることはできませんが、私はそれが役に立つことができると確信しています
追加された 著者 Bijou Trouvaille,