0

持っているいくつかのコンポーネント間のプロトコルを設計したいと思います。それぞれが異なるホスト上で別々のプロセスで実行できます。イニシエーター(クライアント)と応答する人(サーバー)が常に存在します。クライアントはいくつかの言語java/c#/ c ++/cliである可能性があります。私の場合、サーバーは常にJavaです。
そこで、次のプロパティについて考えました。

  • デバッグしやすいように、プレーンテキストにする必要があります。
  • 片側のアップグレードを一見して許可する必要があります(これは、クラスのシリアル化や厳密なメソッド署名がないことを意味します)。
  • フレームワークの場合、inはシンである必要があります(WSDLは私のニーズには多すぎます)。

tcpよりもhttpを使うことを考えました。
私は主に構文に興味があり、Javaにそのような機能をすでに提供しているフレームワークがあるかどうかに興味があります。にそのようなものがあることを漠然と覚えていますSpring

編集:私は薄いフレームワークを好みます。また、RPCでメソッドシグネチャを変更すると、競合の問題が発生するのではないかと心配しています。
私はこの例を見つけました、そしてそれは私がすでに使用しているので私のニーズに足を踏み入れるかもしれませんjaxb

4

4 に答える 4

3

あなたはREST/fulサービスを調べることができます:

リンクされた記事では、SOAPとRESTがより適切な場合のいくつかのガイドラインについても説明しています。

于 2012-04-08T20:14:12.673 に答える
1

私はSOAPを使います。最も簡単ではありませんが、ほぼすべての言語/プラットフォームの組み合わせにさまざまなライブラリがあり、非常に拡張可能です。XML-RPCも提案されるかもしれませんが、SOAPはその後継であるため、XML-RPCの使用はお勧めしません。

于 2012-04-08T20:01:17.490 に答える
1

私はWSDLを使います。実際には、さまざまな言語で記述されたコンポーネント間のリモート通信を確立することを目的としています。私は長い間、C#、PHP、C ++、Python、Javaで高負荷の下でそれを使用してきましたが、それは素晴らしかったです。基本的に、あなたがしなければならないのは、実際に実際のプロトコルを設計することです。これは、WSDL自体ではありません。この場合のプロトコルは、WSDLの上部にあるコマンドのセットです(例:Hello Command(ある種のping))。ログインコマンドとログアウトコマンド(セッション用)、そして必要なあらゆる種類のもの。

于 2012-04-08T19:53:14.857 に答える
0

TCPレベルにとどまり、zeromqなどのインテリジェントライブラリを使用してすべての配線を処理できます。その場合、プロトコル自体は単なるメッセージのセットであり、要件に合わせて調整できます(また、トランスポートインフラストラクチャによって事前に決定されていないWSDLの場合と同様)。

例(私はWebServiceの提案者に、回答に例を当てはめるように挑戦します;)

サーバー(簡潔にするためにPython):

import zmq
ctx = zmq.Context()
socket = ctx.socket(zmq.REP)
socket.bind('tcp://0.0.0.0:12345')
while True:
    message = socket.recv()
    # 'status' and 'shutdown server' would be part of your protocol
    if message == "status":
        socket.send("I'm ok")
    elif message == "shutdown server":
        socket.send("Ok, bye bye")
        break
    # implement your other commands here ...
socket.close()

クライアント:

import zmq
ctx = zmq.Context()
socket = ctx.socket(zmq.REQ)
socket.connect('tcp://localhost:12345')
socket.send('shutdown server')
reply = socket.recv()
print(reply)

それでおしまい。はい、zeromqには30以上の言語バインディングが付属しています。

于 2012-04-08T19:56:30.467 に答える