socketservier
SocketServer简化了网络服务器的编写。它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步。
创建服务器的步骤。首先,你必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法。其次,你必须实例化一个服务器类,传入服务器的地址和请求处理程序类。最后,调用handle_request()(一般是调用其他事件循环或者使用select())或serve_forever()。
集成ThreadingMixIn类时需要处理异常关闭。daemon_threads指示服务器是否要等待线程终止,要是线程互相独立,必须要设置为True,默认是False。
无论用什么网络协议,服务器类有相同的外部方法和属性。
该模块在python3中已经更名为socketserver。
5种类型:BaseServer,TCPServer,UnixStreamServer,UDPServer,UnixDatagramServer。 注意:BaseServer不直接对外服务。
使用socketserver实现EchoServer服务
import socketserver
class EchoServer(socketserver.BaseRequestHandler):
def setup(self):
# 初始化工作,通常情况下不需要重写
super().setup()
def finish(self):
# 清理工作,通常情况下也不需要重写
super().finish()
def handle(self):
message = self.request.recv(1024).strip()
self.request.send(message)
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 1234), EchoServer)
try:
server.serve_forever()
except KeyboardInterrupt:
server.shutdown()
server.server_close() # 关闭socket server连接
这样一个简单的socker服务端就写出来了
socket客户端是可以使用with方法的,我们使用with方法来验证下socket 服务端是否正常
import socket
with socket.socket() as so:
so.connect(('127.0.0.1', 1234))
so.send(b'hello\n')
print(so.recv(1024))
针对每个连接,server会初始化一个handler,并且调用handler的handle方法来处理这个连接