2009-07-13 11 views
1

私のアプリケーションでは、私は2つのDLLを持っています。 1つはC#で書かれ、もう1つはC++で書かれています。彼らはネットワークを介してお互いに通信します。それぞれには、いつも互いに同期していると予想されるオブジェクトインスタンスのリストがあります。ネットワーク上でオブジェクトを同期させて保持しますか?

これにはどのようなネットワークライブラリが利用できますか?

+0

あなたは両方のDLLを行うことができないのはなぜ同じ言語で? – kkaploon

+0

私にはいろいろな理由があります。短いバージョンは、それが私の決断ではないということです:) – djcouchycouch

+0

Windowsは両方のアプリケーションで使用できますか? – chrish

答えて

2

これは実際には正しく実行するにはかなり難しい問題です。そのように、アプローチする方法はたくさんあります。私はそれを行う最良の方法は、c++c#ライブラリの両方を持つプロトコルバッファのようなものを使用することだと思う。データのサイズに応じて、単純にデータオブジェクト全体をシリアル化し、ワイヤを介して送信し、反対側で逆シリアル化して、オブジェクトが変更されるたびにこれを繰り返すことができます。

もちろん、両方のオブジェクトが同時にオブジェクトを変更すると、同期に問題が発生する可能性があります。この場合、Google Waveのような操作を行い、データの差分を送信し、変更をまとめてマージする必要があります。

0

これはかなり曖昧な質問です。

  • 最初に、 C++とc#の両方で動作するライブラリ。そうは思わない。
  • 第2に、「同期」していますか? に変更があった場合、誰にでも の両方に変更がありますか?あなたはどんな種類のロックを持っていますか これはすべて 非常に重要なルールです のタイプに非常に特有の操作とルールは に行きます。
+0

それはゲームのためのピアツーピアネットワークと違いはありません、私は考えます – djcouchycouch

+0

私はそこに何があるか分からないので、質問は意図的に曖昧でした。私はいくつかのゲーム中心のネットワークライブラリに精通していますが、より深刻なアプリケーションのために何が入手可能かはわかりません。 – djcouchycouch

0

すべてがWindows上で実行されている場合、DCOMを使用できます。

0

あなたの状況を十分に理解しているかどうかはわかりませんが、クライアントとサーバーの両方が初期接続時に同じインターフェイスバージョンになっていることを確認しているかどうかは疑問です。そうでない場合は、期限が切れている側が失敗するか更新をリクエストする可能性があります。それは基本的にMMORPGのものです。

0

Velocityと呼ばれるプロジェクトは、「あらゆる種類のデータに高度にスケーラブルなインメモリアプリケーションキャッシュを提供します」。これはマネージコード専用です。 C++のマネージコードですか(またはマネージコードを呼び出すことができますか)?

プロジェクトにはMSDN Magazine articleがあります。

+0

残念ながら、C++はアンマネージドです。そして私はそれが今までにないと思う。 – djcouchycouch

0

私はあなたの質問を理解していませんが、特に「同期している」とはどういう意味でしょうか?

私はICEを投げます。 C#とC++をサポートする軽量で使いやすいCORBAバージョンです。それを見てください。それはあなたがやっていることにあまり適していないかもしれません。

0

私はそれがあなたが念頭に置いたものなのかどうか分かりませんが、この種のことを処理するシステム(オプションのサーバープロセスを備えたC++ライブラリ)を書いています。 C#、C++、C、Java、およびPython用のクライアントAPIが含まれています。これらはすべて同じデータシリアル化プロトコルを使用して相互に通信できるため、言語間および/またはプラットフォーム間の通信に適しています。2つのプロセスは直接通信することができます。また、N個のプロセス通信をサポートしたい場合は、共有オブジェクトを「中央の場所」に保持できるサーバーを実行し、さまざまなクライアントに表示させ、

コードはすべてオープンソース(BSD)であり、ここで見つけることができるなど、お互いに、ブロードキャスト/マルチキャストメッセージを変更されまし:

https://public.msli.com/lcs/muscle/

関連する問題