socketserver通信并发处理

2019-07-16  本文已影响0人  温柔倾怀

实现效果

服务端并发处理客户端请求


重点在服务端的改动--TCP实现

import socketserver

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print("conn is:",self.request) #相当于conn;
        print("addr is:",self.client_address) #相当于addr;

        #通信循环
        while True:
            try:
                #收消息
                data = self.request.recv(1024)
                if not data:break
                print("收到客户端消息是:",data)
                #发消息
                self.request.sendall(data.upper())
            except ConnectionResetError as e:
                print(e)
                break

if __name__ == '__main__':
    s = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) #内部其实实现了连接循环   多线程
    s.serve_forever()

基于UDP的socketserver


import socketserver

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print(self.request)
        #(b'nihaoi', <socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)
        print("客户端发来:",self.request[0])
        self.request[1].sendto(self.request[0].upper(),self.client_address)

if __name__ == '__main__':
    s = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer) #内部其实实现了连接循环
    s.serve_forever()

socketserver模块

  1. server类处理链接



  1. request类处理通信
上一篇 下一篇

猜你喜欢

热点阅读