2011-01-14 17 views
1

C#、Javascript、Javaで書かれたJavaサーバと複数のクライアントの間で何らかのメッセージを交換するには、javaサーバ<-> C#+ javascript + java + *クライアント


バックグラウンドストーリー:その後の手段によって、いくつかのUIのフロントエンドに「架橋」され、我々はJavaで一般的なUIバックエンドを構築しようとしている当社の現在のプロジェクト(サーバ上で実行されている)で

(クライアント、サーバー、またはその両方で実行されている)異なるUIアダプターの当社のサーバー技術は常にJavaになりますが、C#(Silverlight)、JavaScript、Javaクライアントが存在します。将来的にはもっと多分(別のスマートフォン、タブレット)。

UIバックエンドとUIフロントエンドは、クライアントまたはサーバー上の特定のプロパティ/状態/データ変更をそれぞれカプセル化する多かれ少なかれ単純なメッセージ(ほとんどの場合、名前と値のペア)を介して通信します。単一の要求サイクル内で、そのような単純なメッセージのいくつかは、1つの大きなメッセージに集約され、その後、バックエンドからフロントエンドに、またはその逆に渡されます。現時点では、メッセージの送受信は、クライアントとサーバーの1つのエントリポイントで行われます。したがって、WebServiceなどとして公開されるサーバーメソッドはありません。これは、このケースで最も遅くなるためです。

私たちの現在のプロトタイプは、単にJavaサーバで構成され、Javaのデスクトップクライアント(スイング)およびJava Webクライアント(Vaadin)。バックエンドとフロントエンドの間で交換されるメッセージは、事実上、XMLとの間でシリアライズ/デシリアライズされたPOJO(それぞれ特定の "変更"を表す)のリストです。ここまでは順調ですね。

今C#とJavascriptがテーブルに来ます。各技術で何らかのオブジェクトを扱いたいので、ある種の抽象的な言語でメッセージ/変更/ポポを指定し、各ターゲット言語のオブジェクトを生成することをお勧めします。ある時点で、これらのオブジェクトをシリアル化/デシリアライズして、おそらくhttp/s経由でワイヤを介して送信することができます。この目的のために、私たちはGoogleのプロトコルバッファまたはThriftを考えました。どう思いますか?

現時点では、当社の同期リクエスト・レスポンス・サイクルが十分であるが、我々はかなりすぐに、それぞれ非同期の要求と応答やサーバプッシュが必要になります。だから私たちはActiveMQのようなものをすぐに使うことを考えました。どう思いますか?過度に?そうでない場合は、上記のオブジェクト生成(xsd、jaxb、?for j)をどのように達成できますか?より良い方法がありますか?私はActiveMQを使ったことはありませんでしたが、ウェブサイトによると、Java、C#(Spring.NET)、何らかの形でJavascript(STOMP)でも可能です。しかし、これは

このまたは関連するトピックについての任意のヒント、ヒント、経験やコメントが本当に役立つだろう...私にはかなり複雑なようです。

ありがとうございます。

答えて

1

私は、Webサービスを使用することをお勧めします。 WSDL言語は、抽象的な形式でプロトコルのオブジェクトとメッセージを定義します。 JavaやC#のような現代の言語のほとんどは、WSDLをネイティブ・タイプに変換するためのツールとI/Oを扱うライブラリを持っています。

+0

私が言ったように、現在、サーバー/クライアントには1つのエントリポイントがあります。基本的には、POJOにマップされた複数のメッセージをカプセル化する(HTTP)リクエストが来る場所です。私はWebサービスの専門家ではありませんが、私の理解によれば、目的の言語でオブジェクトを生成するWSDLを取得するために、Webサービス(各変更/ POJOに1つ)としていくつかのメソッドを公開する必要があります。おそらく私は間違っていますが、これは変更ごとに1つのHTTP要求につながり、WSよりもさらに遅くなります。そして、WSDLとJavaScriptはどうですか? – Pauli

+0

あなたのWSを設計することは意味があります。きめ細かな要求が多いわけではありません。いくつかの複雑な要求があります。それに応じてサービスの入力と出力を設計してください。 –

0

私はこのシステムの構築に携わっています。プロジェクトのバックエンドはC#、Java、他の言語の束です。フロントエンドはios、アンドロイド、シンビアン、すべての一般WebブラウザーWindowsデスクトップアプリ。最も広く、すべての言語やプラットフォーム間でのフォーマットをサポートしているように見えるので、私たちは、JSONを使用するすべてのこれらのサービスの

は、それが(特にXMLベースのソリューションに比べてクライアント上でかなり速いデコードします。webbrowsers/javascript)、帯域幅が不足しているクライアントにとっては非常に優れた圧縮率を実現しています。

+0

JSONは妥当な音です。だから、私は基本的にバイナリのJSONであるGoogleのprotobufを考えました。しかし、どうやってシリアライゼーションをしましたか?オブジェクトを「手動で」JSONにシリアル化しましたか、JSONライブラリ経由でシリアライズされる各メッセージとターゲット言語のオブジェクトを持っていましたか?コミュニケーションはどのようにしましたか?シンプルなHTTP? – Pauli

+0

c#/ mvcでは、モデル&DataContractJsonSerializerを使用します。 javascriptでは、JSONオブジェクトをネイティブサポートしていないie7のようなブラウザのためのドロップインであるjson2ライブラリを使用します。オブジェクトの初期化は、我々が取り扱うデータ。 2年前にプロジェクトを開始したときに必要なツールの一部が市販されていなかったので、セットアップのJavaScriptの部分は実際は非常に長く複雑なものなので、私たちのパフォーマンスニーズのために自社開発のソリューションがかなりあります。 –

+0

残りの言語については分かりませんtbhプロジェクトのその部分には一度も触れていません –