ホームページ  >  記事  >  バックエンド開発  >  Python標準ライブラリSocketServerの学習

Python標準ライブラリSocketServerの学習

高洛峰
高洛峰オリジナル
2016-10-20 09:25:291274ブラウズ

はじめに: 専門家はソースコードを読むことが非常に効率的な学習方法であるとよく言います。しかし、私たちのような初心者にとって、ソース コードを読むことは、プログラミングのアイデアとコーディング標準を習得する良い方法です。つまり、ソースコードを読むことは万能ではなく、ソースコードを読まないことは絶対に不可能です。

SocketServerは標準ライブラリの中でも非常に代表的なライブラリです。ソケットに基づいてソケット サーバーを迅速に確立するためのフレームワークを提供し、ミックスイン技術を通じてシングルスレッド サーバーをマルチスレッドまたはマルチプロセス サーバーに進化させることができます。 Socketserver.py には多くのクラスがあり、それらのクラスとそれらの関係を 1 つずつ紹介します。

BaseServer、TCPServer、UDPServer、前者は後者の 2 つの親クラスです。 TCP サーバーと UDP サーバーで共有できるメソッドは親クラスに実装され、抽象クラスはサブクラスに実装する必要があります。したがって、実際の作業では、特定のメソッドを独自に実装またはオーバーロードしない限り、一般に BaseServer クラスを継承すべきではありません。さらに、UnixStreamServer と UnixDatagramServer はそれぞれ TCPserver と UDPServer を継承します。 Unix という単語を持つこれら 2 つのクラスは、*nix でローカル ソケット サーバーを構築するために使用されます (ローカル ソケット アクセスは高速ですが、ローカル マシン上のプロセス間通信にのみ使用できます)

次は、ForkingMixIn と ThreadingMixIn の 2 つの組み合わせです。どちらのクラスも、Server クラスで process_request メソッドの新しい実装を提供します。前者は各ユーザー接続を処理するときに新しいプロセスを開始し、後者は新しいスレッドを開始します。 Server クラスに同時処理を実装したい場合は、多重継承を使用してください。または、既に混合されている

class ForkingUDPServer(ForkingMixIn, UDPServer): pass

class ForkingTCPServer(ForkingMixIn, TCPServer): pass

class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass

class ThreadingTCPServer(ThreadingMixIn, TCPServer) ) を直接使用します。 : pass

最後に紹介されていないものは、BaseRequestHandler、StreamRequestHandler、DatagramRequestHandler です。Server と同様に、前者はパブリック メソッドを提供するための後の 2 つの親クラスです

通常、SocketServer を使用する場合は、適切な Server クラスを自分でインスタンス化するだけです。インスタンス化するときに、そのリスニング IP とポート、および以前に RequestHandler から継承されたクラスを渡します (ハンドル メソッドをサーバーのリクエスト ハンドラーとして自分で実装する必要があります)

ここで特別な注意を払う必要があります:

1 IP とポートは、2 つの個別のパラメーターではなく、タプルとして渡されます。

2. 各顧客接続は hanle メソッドの実行後に閉じられます。閉じたくない場合は、サーバーの def shutdown_request(self, request) メソッドを書き直す必要があります

_____私は素晴らしい境界線です______

この標準ライブラリは非常に使いやすいと言えますが、機能的にはまだいくつかの欠点があります。

1. 各ハンドル インスタンス間の通信メカニズムは提供されないため、クライアントは依然としてメッセージを相互に送信するためにオブザーバー モデルを独自に実装する必要があります。

しかし、この機能は SocketServer の役割を超えているようです。自分で実装することもできますし、国産のサードパーティライブラリである python-message を使用してスレッド間でメッセージベースのプログラミングを実行することもできます。

2. マルチスレッドおよびマルチプロセスのソリューションを提供しますが、非同期ソリューションのないサーバーはアクセスされるたびにブロックされます

これについては非常に残念ですが、このライブラリはそれほど複雑ではありません。最悪の場合、非同期ソケットサーバーは自分で作成できます。食料や衣服は自分で十分に確保できます。

本来はソースコードの解釈ですので、この記事にはコードはありません。読者は標準ライブラリにアクセスして、コメントを自分で見ることができます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。