2016-11-05 1 views
2

としてノードのJsを使用すると、エラーの面でメッセージパッシング層

(client)C# tcp ip <--------------------------------->C#/Java tcp ip (server) 
      socket  100/1000 Mbit/s LAN       socket 

は、ハーフオープン接続として(取り扱い、確認応答パケット管理および右側のウィンドウ/バッファを取り上げるよりも、

(client) node-js http request <-----------> node-js http listen (server) 
      ^     100/1000 MBit/s ^
      |      LAN    | 
      v          v 
    a file in ramdrive       a file in ramdrive 
      ^         ^
      |          | 
      v          v 
     C# program requesting      C# or Java program  
      compute on data       computing 

簡単ですサイズ)とスケーラビリティ(ツリー状の接続を使用して10〜100台のサーバ)

node-jsレイヤーがI/Oのためだけに使用される場合、基本的なスイッチ/ルータ(たとえば、無限大ではない)のクラスタのMPIよりも優れていますか?

今のところ、私はtcp-ipオプションを試していますが、すでに処理するには余りにも多くの例外があり、完成したものは遠いからです。デスクトップOSのために最大接続数があり、配列のシリアライズにはサーバーとクライアントのエンディアンをチェックする必要があります。データを送信/計算する前にカウンタポーズする必要があります。またどこでも非同期的に最適です。私はちょうど1つの接続バージョンのための1つのスレッドで始めました。スレッド版には、計算デバイス情報とコンパイル済みカーネル(opencl用)を保持する永続的なローカルデータもあります。

私が正しく理解していれば、mpiとnode-jの両方がサーバとクライアントにランタイムをインストールする必要がありますが、tcp-ipにはそのようなことは必要ありません。しかし、これは他の困難を和らげないでしょうか?

node-jsとC#の間にramdriveを追加することは、tcp接続よりも心配することなくnode-js(とC#)からファイルにアクセスするのが簡単だと思いました。 Httpのリスニングは、データを渡す直前のnode-jsではほぼ1ライナーです。

+2

詳細を知らなくても、HTTPレベルの解決策はソケットレベルの場合よりも遅くなります。 Zeromqは、この種の問題に対する非常に優れたソリューションです。 – Hosar

答えて

2

具体的なことを知らずに特定のソリューションを推奨するのは難しいですが、ソリューションを再発明していると思われます。

チェックアウトRedis。ほとんどの言語用のクライアントライブラリがあり、ネットワーク上で動作し、あらゆる種類のデータ型を処理し、pub/subをサポートします。 Redisの開発者は、多くのアプリケーションで多くの適切なトレードオフを行いました。

関連する問題