python集成模块的使用

本文介绍如何使用 Python 的 SocketServer 模块创建多进程和多线程的 TCP/UDP 服务器。通过继承和组合不同的类实现并发处理客户端请求。具体包括 TCP 和 UDP 请求处理器的定义及服务器启动流程。
  • 继承模块的使用
    python2 SocketServer
    python3 socketserver
功能:通过模块的不同、类的组合完成多进程/多线程的tcp/udp的并发

StreamRequestHandler	处理TCP套接字请求
DatagramRequestHandler	处理udp套接字请求

TCPServer	创建tcp server
UDPServer	创建udp server
  
ForkingMixIn		创建多进程
ForkingTCPServer -->ForkingMinIn + TCPServer
ForkingUDPServer -->ForkingMinIn + UDPServer

ThreadingMixIn		创建多线程
ThreadingTCPServer --> ThreadingMinIn + TCPServer
ThreadingUDPServer --> ThreadingMinIn + UDPServer

 'ThreadingUnixDatagramServer',
 'ThreadingUnixStreamServer',

  • tcp多进程并发服务端的使用
from socketserver import *

#创建服务器类
class Server(ForkingMixIn,TCPServer):
	pass

class Handler(StreamRequestHandler):
	def handle(self):
		#self.request -->accept 返回的套接字
		print('Connect from',\
			self.request.getpeername())
		while True:
			data = self.request.recv(1024)
			if not data:
				print('quit from:',self.request.getpeername())
				break
			print(data.decode())
			self.request.send(b'Received')




if __name__ == "__main__":
	server_addr = ('0.0.0.0',8888)

	#创建服务器对象
	server = Server(server_addr,Handler)

	#启动服务器
	server.serve_forever()
  • 多进程并发udp服务器的使用
from socketserver import *

#创建服务器类
class Server(ForkingMixIn,UDPServer):
	pass

class Handler(DatagramRequestHandler):
	def handle(self):
		while True:
			data = self.rfile.readline(1024)
			print(self.client_address)
			if not data:
				break
			print(data.decode())
			self.wfile.write(b'Received')




if __name__ == "__main__":
	server_addr = ('0.0.0.0',8888)

	#创建服务器对象
	server = Server(server_addr,Handler)

	#启动服务器
	server.serve_forever()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值