socketserver这个模块是利用IO多路复用以及多线程实现并发的,可以让服务器同时建立多个链接
原理如图
我们这样更改服务器代码
import socketserver
'''需要先写上一个类继承它'''
class MyServer(socketserver.BaseRequestHandler):#必须继承这个类才能实现并发
def handle(self):#每个链接建立后都会自动执行该方法
conn = self.request#这个是每个客户端的链接
conn.sendall(bytes('链接已建立', encoding='utf-8'))
while True:
ret_bytes = conn.recv(1024)
ret_str = str(ret_bytes, encoding='utf-8')
if ret_str == 'q':
print(conn, '该链接终止')
break
conn.sendall(bytes(ret_str + ' 信息收到', encoding='utf-8'))
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',7777),MyServer)
'''
这一步操作内部帮我们创建了socket对象,只要有人链接了,会执行Myserver类的
handle方法
'''
server.serve_forever()#while循环,等待用户过来链接
结果如图,
两个人同时链接没有问题