0

新しいプロジェクトでは、Pythonでマルチコンポーネントバックエンドを設計する必要があります。最初は、2つの基本的なコンポーネントがあります。ビジネスルールサーバーと、ブラウザーからの要求を処理するフロントエンドです。

|--------------------|
     Business API
|--------------------|
         ||
         ||
         ||
|--------------------|
    Front server
|--------------------|

このシステムがより多くの機能を取得するにつれて、BusinessAPIに接続するサーバー/コンポーネントをさらに追加する必要があるかもしれません。

今、私は(多くの調査を行った後)シリアル化/逆シリアル化の目的でMessagePackに落ち着きました。

しかし、私が決めることができないのは、通信が行われるべきトランスポート(ワイヤープロトコル)がどうあるべきかということです。いくつかのオプションがあります:

  • 生のTCP/IPソケット
  • zeromqソケット(zerorpc
  • プレーンHTTP

httpから始めるのが良い選択だと思いますが、ペイロードをhttp経由で送信するにはどうすればよいですか?base64エンコードを行うことによって?その場合、私は次のようにする必要があります。

on one end
[actual message] -> [msgpack encode] -> [base64 encode]

on the other end
[base64 decode] -> [msgpack decode] ->   [actual message]

これは、異種のコンポーネント間で多くのチャタリングが発生しているシステムで受け入れられますか?より良い解決策はありますか?httpを介してそれを行うためのより良い方法はありますか?

注:バイナリデータを転送する必要があるため、プレーンJSONを使用できません。したがって、シリアル化ライブラリはmsgpackになります。

4

1 に答える 1

1

それは本当にあなたのシステムの詳細に依存します。

コンポーネントがすべてPython(またはNode.js)であり、すべての通信がネットワーク内で行われる場合は、ZeroRPCを使用できます。

ファイアウォールを越える必要がある場合、またはよりエキゾチックな言語を使用する場合は、HTTPを使用できます。HazzitがコメントHTTPで述べたように、HTTPドキュメントの本文でバイナリデータを転送することはまったく問題ありません。または、マルチパートポストエンコーディングを使用することもできます。 。

于 2013-03-01T18:10:14.683 に答える