模块socketserver,服务端并发socket

我们已经学会了socket去写服务端了...但是,socket只能一对一的去跟客户端去链接..多个用户就只能等待前一个用户断开,用户体验很不好..

其实很简单,socketserver大多都是固定写法

 1 import socketserver
 2 class Server(socketserver.BaseRequestHandler):      # 创建一个服务器类,继承父类socketserver.BaseRequestHandler
 3     def handle(self):
 4         # 固定写法,运行时,每个客户端对象会运行此方法,如果没有,就会执行父类BaseRequestHandler中handle方法
 5         msg = self.request.recv(1024).decode()
 6         print(msg)
 7         answer = input("请输入信息:").encode()
 8         self.request.send(answer)
 9 
10 
11 if __name__=="__main__":
12     server = socketserver.ThreadingTCPServer(("127.0.0.1",9999),Server)
13     # 创建多个并发对象,将本地服务器IP及所创建的服务器类类名传入
14     server.serve_forever()
15     # 一直执行此对象

这样,一个简单的并发服务器就完成了,,可以与多个客户端,进行简单的收发消息操作

实际上socketserver执行原理和socket是一样的,只是为每个客户端创建一个对象去执行而已..

简单看看源码:

1 在父类中为对象封装属性,,将我们传入的地址,和类名传入.创建socket对象,并运行绑定和监听

2 绑定和监听的实现方法

3 接下来运行对象中,我们定义的handle方法,,每次连接创建不同的对象,所以可以实现并发

所以,如果handle名称不一致,会运行父类的handle,而pass

上面就是socketserver的实现步骤了..

猜你喜欢

转载自www.cnblogs.com/NoteBook3013/p/10426408.html