3

私は初めてクライアント サーバー プログラムに取り組んでいますが、自分がやっていることをどこから始めればよいのか、ひどく不十分だと感じています。

Google Protocol Buffersを使用して、クライアントとサーバーの間でバイナリ データを転送します。Python バリアントを使用します。私が理解しているように、基本的な考え方は、クライアントがデータをシリアル化してサーバーに送信し、サーバーがデータを逆シリアル化するというものです。

問題は、バイナリ データをサーバーに送信するためにどこから始めればよいか本当にわからないことです。HTTP リクエストのような「単純な」ものになることを望んでいましたが、バイナリ データを転送する方法を Google で検索し、膨大な数のチュートリアル、ガイド、ドキュメントで迷子になりました。HTTP 転送を調査しても、間違ったツリーを鳴らしているかどうかさえわかりません (私はそれを使用したいと思っていたので、セキュリティが必要な場合は HTTPS にノッチアップできます)。ただし、ソケットプログラミングのレベルに行く必要はありません。それを行う前に、利用可能なライブラリを使用したいと思います。(私は標準の Python ライブラリも好みますが、完璧なサード パーティのライブラリがあれば生きていきます。)

したがって、Python を介してバイナリ データを転送するための適切な方法について、適切な出発点を誰かが持っている (または自分で少し説明したい) 場合は、感謝します。ちなみに、私が実行しているサーバーは現在mod_pythonでApacheを実行しています。

4

4 に答える 4

4

あるシステムから別のシステムにバイナリ データを移動する場合は常に、いくつかの点に留意する必要があります。

異なるマシンは、同じ情報を異なる方法で保存します。これは、メモリとネットワークの両方に影響を与えます。詳細はこちら ( http://en.wikipedia.org/wiki/Endianness )

Python を使用しているため、ここで少し余裕を持って (クライアントとサーバーの両方が Python で動作すると仮定して)、cPickle を使用してデータをシリアル化することができます。本当にバイナリが必要な場合は、python の struct モジュール ( http://docs.python.org/library/struct.html ) に慣れる必要があります。また、データをパック/アンパックする方法を学びます。

ネットワーク通信の難しさを乗り越えるまで、最初は単純なライン プロトコル サーバーから始めます。これまでに行ったことがない場合は、すぐに混乱する可能性があります。コマンドの発行方法、データの受け渡し方法、エラー時の再同期方法など...

クライアント/サーバー プロトコル設計の基本を既に知っている場合は、まずディスク上でバイナリ構造のパックとアンパックを練習してください。このような場合は、HTTP と FTP の RFC も参照します。

-------コメントに基づいて編集-------- 通常、この種のことは、ファイルのチェックサムとファイルのサイズを含む「ヘッダー」をサーバーに送信することによって行われますバイト。HTTP ヘッダーを意味しているわけではないことに注意してください。必要に応じてカスタマイズできます。イベントの連鎖は、このようなものにする必要があります...

CLIENT: "UPLOAD acbd18db4cc2f85cedef654fccc4a4d8 253521"
SERVER: "OK"
(server splits the text line to get the command, checksum, and size)
CLIENT: "010101101010101100010101010etc..." (up to 253521 bytes)
(server reasembles all received data into a file, then checksums it to make sure it matches the original)
SERVER: "YEP GOT IT"
CLIENT: "COOL CYA"

これは非常に単純化されていますが、ここで私が話していることを理解していただければ幸いです。

于 2009-04-22T02:28:37.800 に答える
3

あなたの質問が正しかったかどうかはわかりませんが、ねじれたプロジェクトを見てください。

FAQ でわかるように、「Twisted は Python で書かれたネットワーク エンジンであり、多数のプロトコルをサポートしています。これには、Web サーバー、多数のチャット クライアント、チャット サーバー、メール サーバーなどが含まれています。Twisted は、多数のサブ サーバーで構成されています。 -個別にアクセスできるプロジェクト[...]".

ドキュメントは非常に優れており、インターネット上には多くの例があります。それが役に立てば幸い。

于 2009-04-22T02:50:27.687 に答える