标准库--并发集成模块socketserver
https://docs.python.org/zh-cn/3/library/socketserver.html#module-socketserver
1、socket并发集成模块
【python2】 SocketServer
【python3】 socketserver
【功能】通过模块提供的接口组合可以完成多进程/多线程 tcp/udp的并发程序
2、接口
【1】StreamRequestHandler 处理tcp请求
【2】DatagramRequestHandler 处理udp请求
【3】ForkingMixIn 创建多进程
【4】ThreadingMixIn 创建多线程
【5】TCPServer 创建tcp server
【6】UDPServer 创建udp server
【7】ForkingTCPServer ForkingMixIn + TCPServer
【8】ForkingUDPServer ForkingMixIn + UDPServer
【9】ThreadingTCPServer ThreadingMixIn + TCPServer
【10】ThreadingUDPServer ThreadingMixIn + UDPServer
3、例子
【多线程UDP并发】
【sock-ser-udp-server.py】
from socketserver import *
class Server(ForkingMixIn,UDPServer):
pass
class Handler(DatagramRequestHandler):
def handle(self):
while True:
data = self.rfile.readline().decode()
if not data:
break
print(data)
#发送消息
self.wfile.write(b"Receive\n")
server = Server(('0.0.0.0',8888),Handler)
server.serve_forever()
【udp-client.py】
from socket import *
import sys
HOST = sys.argv[1]
PORT = int(sys.argv[2])
#要访问的服务端地址
ADDR = (HOST,PORT)
#创建套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
while True:
data = input("消息:")
if not data:
break
sockfd.sendto(data.encode(),ADDR)
data,addr = sockfd.recvfrom(1024)
print("从服务端接收:",data.decode())
sockfd.close()
【多进程TCP并发】
#多进程 tcp server
from socketserver import *
#创建server类
# class Server(ForkingMixIn,TCPServer):
# class Server(ForkingTCPServer):
# pass
#多线程tcp并发
class Server(ThreadingTCPServer):
pass
#具体的请求处理类
class Handler(StreamRequestHandler):
def handle(self):
# self.request ==> accept返回的套接字
print("Connect from",\
self.request.getpeername())
while True:
data = self.request.recv(1024).decode()
if not data:
break
print(data)
self.request.send(b'Receive')
#创建server对象
server = Server(("0.0.0.0",8888),Handler)
#启动服务器
server.serve_forever()
from socket import *
#创建套接字
sockfd = socket()
#发起连接
sockfd.connect(('127.0.0.1',8888))
while True:
#消息收发
msg = input("Msg>>")
if not msg:
break
sockfd.sendall(msg.encode())
data = sockfd.recv(1024)
print(data.decode())
sockfd.close()