SocketServer はネットワーク サービス フレームワークを作成します。 TCP、UDP、UNIX ストリーム、UNIX データグラムを介した同期ネットワーク要求を処理するクラスを定義します。
1. サーバーの種類
SocketServer には 5 つの異なるサーバー クラスがあります。
1.BaseServer は API を定義しており、インスタンス化や直接使用には使用されません。
2.TCPServerはTCP/IPソケット通信に使用されます。
3.UDPServer はデータグラム ソケットを使用します。
4.UnixStreamServer と UnixDatagramServer は Unix ドメイン ソケットを使用し、UNIX プラットフォーム上でインテリジェントに使用されます。
2. サーバー オブジェクト
リクエストされたアドレスとリクエスト処理クラス (インスタンスではない) をリッスンするサーバーを構築します。
1.class SocketServer.BaseServer
これは、モジュール内のすべてのサーバー オブジェクトのスーパー クラスであり、インターフェイスを定義し、実装のほとんどはサブクラスで完了します。
2.BaseServer.fileno
どのサーバーがリッスンしているかを示す整数のファイル記述子を返します。この関数は最も一般的に select.select() に渡され、複数のサービスが同じプロセスを監視できるようになります。
3.BaseServer.handle_request
この関数は、次のメソッドを順番に呼び出します。 get_request()、verify_request、および process_request。
ユーザーが handle() メソッドを指定して例外をスローした場合、 handle_error() メソッドが呼び出されます。
self.timeout 以内にリクエストが受信されなかった場合、handle_timeout() と handle_request() が戻ります。
4.BaseServer.serve_forever
BaseServer.serve_forever(poll_interval=0.5)、明示的な shutdown() リクエストまでリクエストを処理します。ローテーション トレーニングは、poll_interval 時間ごとに閉じられます。 self.timeout を無視します。スケジュールされたタスクを使用する必要がある場合は、他のスレッドを使用する必要があります。
5.BaseServer.shutdown
は、serve_forever() にループを停止するように指示します。
6.BaseServer.RequestHandlerClass
ユーザーリクエストハンドラークラス。リクエストごとにこのクラスのインスタンスを作成します。
3. サーバーの実装
サーバーを作成する場合、通常は既存のクラスを再利用して、カスタムのリクエスト処理クラスを提供するだけです。ニーズを満たさない場合にサブクラスをオーバーライドするための BaseServer メソッドがいくつかあります。
1.verify_request(reqeust, client_address): ブール値を返す必要があります。True が返された場合、リクエストは処理されます。False が返された場合、リクエストは拒否されます。この関数は、アクセス制御サービスを実装するためにオーバーライドできます。
2.process_request(request, client_address):finish_request を呼び出して、RequestHandlerClass() のインスタンスを作成します。必要に応じて、この関数はリクエストを処理するための新しいプロセスまたはコルーチンを作成できます。
3.finish_request(request, client_address): リクエスト処理インスタンスを作成します。 handle() を呼び出してリクエストを処理します。
4. リクエスト ハンドラー
リクエスト ハンドラーは、受信リクエストを受信し、実行するアクションを決定するための作業のほとんどを実行します。ハンドラーは、「プロトコル」(HTTP や XML-RPC など) にソケット層を実装する役割を果たします。受信リクエスト ハンドラーからリクエスト データを読み取り、処理し、応答を書き込みます。これをオーバーライドするには 3 つの方法があります。
1.setup(): リクエストのリクエスト ハンドラーを準備します。これはハンドルの前に初期化されて実行されます。
2.handle(): 実際のリクエスト作業を実行します。受信リクエストを解析し、データを処理し、応答を返します。
3.finish(): 作成された setup() をいつでもクリーンアップします。
5. 例
次の例は、tcp、udp、および非同期を示しています。
りー
3. 非同期の例
非同期ハンドラーは、ThreadingMixIn クラスと ForkingMixIn クラスを通じて構築できます。
import SocketServer class MyHandler(SocketServer.BaseRequestHandler): def handle(self): self.data = self.request.recv(1024).strip() print '{} wrote:'.format(self.client_address[0]) print self.data self.request.sendall(self.data.upper()) if __name__ == '__main__': HOST, PORT = 'localhost', 9999 server = SocketServer.TCPServer((HOST, PORT), MyHandler) server.serve_forever()
(1) SocketServerTCPサーバーを作成します
import SocketServer class MyHandler(SocketServer.BaseRequestHandler): def handle(self): data = self.request[0].strip() socket = self.request[1] print '{} wrote:'.format(self.client_address[0]) print data socket.sendto(data.upper(), self.client_address) if __name__ == '__main__': HOST, PORT = 'localhost', 9999 server = SocketServer.UDPServer((HOST, PORT), MyHandler) server.serve_forever()
(2) SocketServerTCを作成しますPクライアント
import socket
import threading
import SocketServer
class MyHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
curr_thread = threading.current_thread()
response = '{}: {}'.format(curr_thread.name, data)
self.request.sendall(response)
class Server(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
def client(ip, port, message):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))
try:
sock.sendall(message)
response = sock.recv(1024)
print 'Received: {}'.format(response)
finally:
sock.close()
if __name__ == '__main__':
HOST, PORT = 'localhost', 0
server = Server((HOST, PORT), MyHandler)
ip, port = server.server_address
serer_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
print 'Server loop running in thread:', server_thread.name
client(ip, port, 'Hello World 1')
client(ip, port, 'Hello World 2')
client(ip, port, 'Hello World 3')
server.shutdown()
server.server_close()
Python の SocketServer モジュールがネットワーク リクエストを処理する方法について詳しくは、PHP 中国語 Web サイトの関連記事に注目してください。

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

PythonとCは、メモリ管理と制御に大きな違いがあります。 1。Pythonは、参照カウントとガベージコレクションに基づいて自動メモリ管理を使用し、プログラマーの作業を簡素化します。 2.Cには、メモリの手動管理が必要であり、より多くの制御を提供しますが、複雑さとエラーのリスクが増加します。どの言語を選択するかは、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

PythonまたはCを選択するかどうかは、プロジェクトの要件に依存するかどうかは次のとおりです。1)Pythonは、簡潔な構文とリッチライブラリのため、迅速な発展、データサイエンス、スクリプトに適しています。 2)Cは、コンピレーションと手動メモリ管理のため、システムプログラミングやゲーム開発など、高性能および基礎となる制御を必要とするシナリオに適しています。

Pythonは、データサイエンスと機械学習で広く使用されており、主にそのシンプルさと強力なライブラリエコシステムに依存しています。 1)Pandasはデータ処理と分析に使用され、2)Numpyが効率的な数値計算を提供し、3)SCIKIT-LEARNは機械学習モデルの構築と最適化に使用されます。これらのライブラリは、Pythonをデータサイエンスと機械学習に理想的なツールにします。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版
ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
