30.4. エンタープライズ開発ステップ2.4:サービス・エンドの迅速な開発
5289 ワード
前述の内容では,TCPプログラミングとUDPプログラミングによるネットワークデータの通信と共有について述べた.
クライアントプログラムの作成は比較的容易であり,主にサービス側に接続してサービス側とデータインタラクションを行う必要があることが分かる.しかし,サービス側のプログラム作成は複雑であり,データの同時処理など様々な問題を考慮すると,より複雑で操作しにくい.
pythonは、必要なサービス・エンド環境をより迅速に構築するためのsocketserverモジュールを提供します.
本節の内容 socketserverモジュール概要 通常モードサービス側プログラミング 同時モードサービス側プログラミング 1.socketserverモジュールの概要 socketserverとは何ですか?socketserverモジュールのpythonが提供する内蔵のサービスエンドプログラムを迅速に開発するためのサーバフレームワークは、大量の実装をカプセル化することで開発者の作業量を削減し、より高品質のサービスエンドプログラムを迅速に開発することができます. socketserverでは何が提供されていますか?socketserverモジュールが主に含むサーバクラス: について詳しく説明します. socketserverコア操作?SOcketserverフレームワークでは、サービス側の処理クラスは、主にStreamRequestHandler(TCPプロトコルベース)、DatagramRequestHandler(UDPプロトコルベース)、処理クラスにおいて非常に重要な方法 を実行するために使用される. socketserverの構造?socketserverには主に2つの部分が含まれています.サーバと処理クラスサービスクラスはsocketserverが に使用されます.
2.サービス側プログラミング
2.1. TCPサービス側プログラミング
SOcketserverを使用してサービス・エンド・プログラムを作成するには、次のようにします.
この場合、通常のモードを使用してクライアントプログラムを開発するには、次のようにします.
上記のプログラムを実行すると、以前と同様に、クライアントとサービス間のデータ通信を実現することができる.以前とは異なる場合、クライアントを閉じると、サービス側プログラムが実行され、クライアントを再起動すると、クライアントはサービス側にアクセスし、接続と通信を再確立します.
2.2. UDPサービス側プログラミング
SOcketserverのUDPServerサービスクラスとDatagramRequestHandler処理クラスを使用したサービス側のプログラミング処理は以下の通りです.
UDPクライアントコードを通常の方法で開発するには、次のようにします.
このときサービス側プログラムを起動し,クライアントプログラムを起動すれば,サービス側とクライアント時間のデータ通信を実現できる.また、複数のクライアントプログラムを起動してみてください.彩卵がありますよ.
3.サービス側同時
マルチスレッドまたはマルチプロセス同時化の使用方法についても簡単ですが、リファレンスコードは以下の通りです.興味があれば、同時プログラミングを学習した後、ThreadingTCPServerやForkingTCPServerのようなマルチスレッドとマルチプロセス同時化の操作を振り返ってみてください.サービス側リファレンスコード:
クライアントか通常のクライアントか
大牧莫邪png
クライアントプログラムの作成は比較的容易であり,主にサービス側に接続してサービス側とデータインタラクションを行う必要があることが分かる.しかし,サービス側のプログラム作成は複雑であり,データの同時処理など様々な問題を考慮すると,より複雑で操作しにくい.
pythonは、必要なサービス・エンド環境をより迅速に構築するためのsocketserverモジュールを提供します.
本節の内容
TCPserver、UCPserver、ThreadingTCPserver、ThreadingUDPserver、ForkingTCPserver、ForkingUDPserver
注意:上記TCPはTCPサービス側プログラミングに必要なサービスクラスを表し、UDPはUDPプログラミングに必要なサービスクラスを表し、Threadingのマルチスレッド同時需要を表すサービスクラスを含む.Forkingを含むマルチプロセスの同時性を示すサービスクラスマルチスレッドとマルチプロセスについては、後述するheadler()
がサービス側プログラムにおけるコアオペレーションclass mytcpserver(socketserver.StreamRequestHandler):
def handle(self):
#
TCPserver、UDPserver
などの処理クラスを内蔵しています.処理クラスにはhandle()メソッドが含まれています.ビジネス処理2.サービス側プログラミング
2.1. TCPサービス側プログラミング
SOcketserverを使用してサービス・エンド・プログラムを作成するには、次のようにします.
import socketserver
#
class myTcp(socketserver.StreamRequestHandler):
#
def handle(self):
# client_address
print(" :%s" % str(self.client_address))
while True:
#
msg = self.request.recv(1024)
if not msg:
break;
print(" :%s" % msg.decode("UTF-8"))
#
self.request.sendall(" ".encode("UTF-8"))
#
if __name__ == "__main__":
# , , 8888
server = socketserver.TCPServer(('', 8888), myTcp)
#
server.serve_forever()
この場合、通常のモードを使用してクライアントプログラムを開発するには、次のようにします.
import socket
sc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sc.connect(("192.168.10.108", 8888))
while True:
msg = input(" :")
if not msg or msg == "exit":
break
sc.sendall(msg.encode("UTF-8"))
msg = sc.recv(1024)
print(" :" + msg.decode("UTF-8"))
sc.close()
上記のプログラムを実行すると、以前と同様に、クライアントとサービス間のデータ通信を実現することができる.以前とは異なる場合、クライアントを閉じると、サービス側プログラムが実行され、クライアントを再起動すると、クライアントはサービス側にアクセスし、接続と通信を再確立します.
2.2. UDPサービス側プログラミング
SOcketserverのUDPServerサービスクラスとDatagramRequestHandler処理クラスを使用したサービス側のプログラミング処理は以下の通りです.
import socketserver
#
class myUdp(socketserver.DatagramRequestHandler):
#
def handle(self):
#
print(" :" + str(self.client_address))
#
while True:
#
# msg = self.request.recv()
msg = self.rfile.readline()
if not msg:
break
print(" :%s" % msg.decode("UTF-8"))
#
self.wfile.write(" ".encode("UTF-8"))
#
if __name__ == "__main__":
# UDP
server = socketserver.UDPServer(("", 8989), myUdp)
# UDP
server.serve_forever()
UDPクライアントコードを通常の方法で開発するには、次のようにします.
import socket
sc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
data = input(" :")
if not data or data == "exit":
break
sc.sendto(data.encode("UTF-8"), ("192.168.10.108", 8989))
data,recv = sc.recvfrom(1024)
if not data:
break
print(" :" + data.decode("UTF-8"))
sc.close()
このときサービス側プログラムを起動し,クライアントプログラムを起動すれば,サービス側とクライアント時間のデータ通信を実現できる.また、複数のクライアントプログラムを起動してみてください.彩卵がありますよ.
3.サービス側同時
マルチスレッドまたはマルチプロセス同時化の使用方法についても簡単ですが、リファレンスコードは以下の通りです.興味があれば、同時プログラミングを学習した後、ThreadingTCPServerやForkingTCPServerのようなマルチスレッドとマルチプロセス同時化の操作を振り返ってみてください.サービス側リファレンスコード:
import socketserver
class myTcp(socketserver.StreamRequestHandler):
def handle(self):
while True:
data = self.request.recv(1024)
print(" :" + data.decode("UTF-8"))
self.request.sendall(" ".encode("UTF-8"))
if __name__ == "__main__":
server = socketserver.ThreadingTCPServer(("", 9000), myTcp)
server.serve_forever()
クライアントか通常のクライアントか
import socket
sc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sc.connect(("192.168.10.108", 9000))
while True:
msg = input(" :")
if not msg or msg == "exit":
break
sc.sendall(msg.encode("UTF-8"))
msg = sc.recv(1024)
print(" :" + msg.decode("UTF-8"))
sc.close()
大牧莫邪png