04 python 服务器模块SocketServer实现线程化
2020-07-17 本文已影响0人
_Mirage
鉴于分叉占用的资源比较多(每个分叉出来的进程都必须有自己的内存),我们可以使用线程化来解决这个问题。
线程是轻量级进程(子线程),都位于同一个进程中并共享内存,这减少了占用的资源。但这也带来了一个缺点:由于线程共享内存,我们必须要确保它们不会比彼此干扰或同时修改同一项数据,否则会引起混乱。
基于SocketServer的简易线程化服务器:
from socketserver import TCPServer, ThreadingMixIn, StreamRequestHandler
# 同分叉化服务器一样,我们自定义子类多继承自ThreadingMixIn和TCPServer
class Server(ThreadingMixIn, TCPServer):
pass
class Handler(StreamRequestHandler):
# 处理客户端请求的实例方法
def handle(self):
addr = self.request.getpeername()
print('来自{}的连接请求..'.format(addr))
self.wfile.write(bytes('谢谢你的连接...', 'utf-8'))
# 使用自定义的服务器即可简便实现线程化(简便)
# 服务器使用: 端口1234, IP为本机IP, 处理客户端请求的类: Handler
server = Server(('', 1234), Handler)
print('等待客户端连接中....')
server.serve_forever()
客户端: 同样可以使用socket实现简易客户端完成对话