2

私はPythonでサーバーとクライアントシステムを書いています。システムの目的は、クライアントがオンラインかどうかを確認することです。

クライアントは定期的に中央サーバーに「チェックイン」を要求します。サーバーが指定された時間内にその要求を受信しない場合、人間に警告します。

私はネットワーク プログラミングに慣れていないので、自分がやろうとしていることにどのテクノロジが最も適しているかわかりません。

私は見てきた:

  • ツイスト
  • UDP または TCP ソケット
  • HTTP リクエスト

サーバーがクライアントの要求に応答するかどうかまだ決めていません。応答したとしても、クライアント プログラムが「チェックイン」されたことを確認するためだけです。ただし、これは少し冗長に思えます。

最もシンプルで信頼性の高いソリューションと思われるため、私は TCP ソケット サーバー モデルに傾倒しています。

結論として、私は2つの質問があります:

  1. ネットワークに最も適したネットワーク テクノロジは何ですか?
  2. 双方向接続を確立することは理にかなっていますか? それとも、クライアントからサーバーへの一方向接続で十分ですか?

ありがとう!

4

1 に答える 1

1

私が理解しているように、これは確かにうまくいきませんが、Twisted はプロトコルを実装するための単なるフレームワークです。http WITH twisted を実装できますが、これは http の代わりにはなりません。

for 1: 私がこれを行っていて、具体的な要件がない場合、http (または https) が私のリストの上位にあるでしょう。再構成せずに通過したいファイアウォールを通過でき、両方の端で作業するための多数のツールセット (サーバーとアプリの開発) があり、すべてで機能します。「http://server.com/checkin?id=12345&status=OK」などを GET するのは簡単です。セキュリティが懸念される場合は、部外者に表示されることに注意してください。ある種の時間 + ID ベースのトークン (公開鍵で暗号化された文字列と考えてください) と https を使用して、部外者がリプレイ攻撃を使用できないようにすることができます。(「https://server.com/checkin?token=7d71905f039f67bedcaec2fe5ccc6783」のように見えるかもしれません。16 進文字列は、サーバーで「$ID:$STATUS:$TIME」または同様のものに復号化されます。)

http を使用するもう 1 つの利点は、上記の「チェックイン」は、Windows、Solaris、Linux、BSD、または本当に何でも。負荷分散は簡単で (Fortune 1000 のすべてに「SuperCheckIn」アプリのライセンスを付与して数十億ドルを稼いでいる場合)、実際には上限がなく、下限もほとんどありません。このデバイスは、洗練されたカスタム Windows サービス、または *nix で「低レベル」の wget と cron を使用できるため、同様のソフトウェアの自由を享受できます。(注: wget や cron に反対するものはありません。これらは私のお気に入りの 1 つです)

デバイスに組み込まれたアーム (またはそれ以下) のプロセッサのように、超軽量が必要な場合は、UDP が適切な答えかもしれませんが、チェックインが重要な場合は、信頼性を高める方法を考え出す必要があります。受信したデータの基本的なチェックサムを含む単純な ACK 応答が機能し、実装も簡単です。

セルラーネットワークを介してARMデバイスをリッスンするためにUDPサーバーを実装したばかりですが、UDPよりもはるかに簡単ではないと言わざるを得ません。

2 の場合: データが送信されたことを確認する別の方法があるかどうかによって異なります。UDP を使用すると、特定の期間内にデータのチェックサムを使用してデータの受信を確認したいと思うでしょう。http では、組み込まれています (応答コード)。

覚えておいてください:キス。http は、本質的に互換性がありながらそれを実現します。ツイスト、私見、状況は少し複雑です。

于 2012-06-15T19:40:09.390 に答える