2

過去 2 日間、stackoverflow と Web でより一般的な回答を探していましたが、適切な回答が見つかりませんでした。しかし、私は確かにそれをする最初の人ではありません:

Java で p2p オーバーレイを実装しています。目的は、ピア間でメッセージを交換することです。メッセージは、送信者、受信者、およびコンテンツを含む Message クラスによって表されます。コンテンツは、Context インターフェースを拡張するクラスとして表されます (メッセージのタイプごとに、Context を拡張する新しいクラスが作成され、追加のフィールドを含めることができます。これはアプリケーション固有です)。コンテキストの className もメッセージに格納されます。ただし、ネットワーク経由で送信されるメッセージを言語に依存しないようにしたいため、変換したメッセージをネットワーク経由で送信する前に JSON オブジェクトに変換します。これまでのところ、素晴らしいことは何もありません。

メッセージを受信するときに疑問が生じます。メッセージクラスであると想定する JSON オブジェクトを受信します (型チェックが実行されます)。className としてメッセージに格納されているクラスの内容が含まれます。

  1. そのようなクラス名を保存してから、クラスのインスタンスを作成して、メッセージを受信したときにコンテンツを動的に保存するのが賢明ですか (つまり、コンテンツは SpecificContent クラスのインスタンスになりますが、インターフェイス Content として表示されます)。その後、コンテンツはアプリケーション レベルで利用可能になり、特定のメソッドにアクセスするためにキャストできます。

  2. Javaクラスを単純にシリアル化せずに、ネットワーク経由でメッセージを送信するためのより良い/標準的な方法はありますか? (この場合、C++ などで書かれたプログラムとは通信できませんでした) (Rube Goldberg マシンにほかならない CORBA については話していません)

コメント/質問/回答をお待ちしております。

よろしく、

BF

4

2 に答える 2

0

あなたの課題は、異種システムの統合です。あなたがやっていることは、おおざっぱに言えば、従われている実践です (少なくとも原則として)。

テキストベース (ここでは JSON) プロトコルを使用して異種システム間で情報を交換するという考えは、システム統合または相互運用性の中心です。実際、Web サービスの標準的な慣行はこれにほかなりません。ここで XML は、異種システム間でテキスト ベースのプロトコルとして使用されます。

あなたの質問に答えるには:

  1. 独自のプロトコルを使用している場合は、受信したメッセージ オブジェクトを解釈するクラス名 coz を送信しても問題ありません。SOAP-Web サービスなどの標準的な方法を使用した場合、これらは自動的に処理されます。定義する必要があるのは、 WSDLと呼ばれるメッセージ交換のサービス コントラクトだけです。

  2. XML はインターネットの言語です。xml を使用して、ネットワーク経由で情報を交換します。広く使用されているすべての言語 (Java、C#、PHP など) では、ネイティブ言語オブジェクトを同等の xml 表現に変換する既製のプログラムを利用できます (たとえば、Jaxbを使用して Java オブジェクトを xml 表現に変換します)。

于 2012-06-12T10:42:25.413 に答える
0

特定のメッセージング層の実装を選択する場合、一般的には、パフォーマンスと柔軟性のバランスを取ることになります。最も柔軟で最もパフォーマンスが低いのは、テキストベースの自己記述型エンコーディング (JSON、XML/SOUP、YAML、タグ/タイプ/値のバリエーションなど) です。SOUP Web サービスまたは FIX がその例です。最高のパフォーマンスのものは次のとおりです。固定フィールド オフセットとバイナリ エンコーディングを使用すると、ASN.1 がその例になります。ややバランスがとれているが、後者に偏っているのは Google Protocol Buffers です。

于 2012-06-12T10:44:25.863 に答える