高速なコマンド/レスポンスインタラクションに使用するプロトコルは何ですか?
-
06-07-2019 - |
質問
コマンド/レスポンスの高速相互作用のためのプロトコルを設定する必要があります。私の本能は、SMTPやPOP3がどのように機能するかなど、CRLFで区切られたASCII文字列を使用して単純なプロトコルを組み合わせて、保護する必要がある場合はSSH / SSLでトンネリングするように指示しています。
これを行うことはできますが、OSが提供するソケットライブラリインターフェイスではなく、使いやすいライブラリを使用できるように、既存のテクノロジを基に構築したいと思います。
必要です...
- 構造化データをやり取りするコマンドと応答。 (XML、S式、Do n't care。)
- サーバーがポーリングされることなく、クライアントに予定外の通知を行う機能。
ご意見をお聞かせください
解決
AMQPは有望に聞こえます。または、XMPPはかなりのオーバーヘッドがありますが、必要なものの多くをサポートすると思います。
とはいえ、達成しようとしているものによっては、単純なアドホックプロトコルの方が簡単かもしれません。
他のヒント
要求/応答だけが必要な場合、HTTPは非常に簡単です。すでにリクエスト/レスポンスプロトコルです。クライアントおよびサーバー側は、ほとんどの言語で広く実装されています。スケールアップはよく理解されています。
これを使用する最も簡単な方法は、POST要求としてサーバーにコマンドを送信し、サーバーが応答の本文で応答を返信することです。独自の動詞を使用してHTTPを拡張することもできますが、キャッシュプロキシやHTTPを理解するその他のインフラストラクチャを利用する方が作業が増えます。
非同期通知が必要な場合は、pub / subプロトコル(Spread、XMPP、AMQP、JMS実装、またはTibcoRV、Tibco EMS、Websphere MQなどの商用pub / subメッセージブローカー)を確認します。選択するプロトコルまたは実装は、構築しているシステムの信頼性、遅延、およびスループットのニーズによって異なります。たとえば、ネットワークが混雑しているときに通知をドロップしても問題ありませんか?クライアントがオフラインのときの通知はどうなりますか?クライアントが再接続したときに破棄されるか、キューに入れられますか。
SNMPのようなものはどうですか?アプリが使用するモデルに正確に適合するかどうかはわかりませんが、非同期通知とプル(つまり、TRAPとGET)の両方をサポートしています。
これは非常に多くの考慮すべき変数を伴う素晴らしい質問であり、質問ではパケット形式、非同期メッセージングと同期メッセージング、およびセキュリティについてのみ言及しました。考えられるものは他にもたくさんあります。 7層プロトコルスタック(OSI / ISO)の説明を読んで、それらの層で何が必要か、その層を構築するか、他の場所から取得するかを自問することをお勧めします。 (主にレイヤー6と7に興味があるようですが、下位レイヤーについても言及しています。)
これが安全性が重要なアプリケーションにあるのか、正式なV& Vを備えたシステムの一部にあるのかも考えてください。本当に優れた、信頼できる通信システムの設計は簡単ではありません。また、「力不足」もプロトコルは、エラー回復を行うためにアプリケーションに多くのコーディングの負担をかける可能性があります。
最後に、あなたに似た他のアプリケーションがどのように仕事をするかを検討することをお勧めします(オープンソースをチェックしたり、本を読んだり)。また、米国特許庁のデータベースなども役立ちます。解決しようとしていたコミュニケーションの問題の説明を読むだけで素晴らしいアイデアを得ることができます。