Python 协程实现socket并发

socket多并发
  socket能够实现单个客户端进行请求访问,它能够经过 socketserver来实现并发功能呢,socketserver是经过 启用多线程实现并发,在这里咱们也能够经过gevent协程 来实现单个线程下的多并发。
 
socket server:
import gevent
from gevent import socket,monkey
monkey.patch_all()


def server(port):
    s = socket.socket()
    s.bind(('0.0.0.0', port))
    s.listen(500)
    while True:
        cli, addr = s.accept()

        # socket会建立一个线程连接,这里会交给协程处理
        # 连接后经过gevent启动一个协程
        # 接收一个函数,与连接实例参数
        gevent.spawn(handle_request, cli)


# 全部交互都由handle处理
def handle_request(conn):
    try:
        while True:
            data = conn.recv(1024)
            print("recv:", data)
            conn.send(data)
            if not data:
                # 若是没有数据就关闭Client端
                conn.shutdown(socket.SHUT_WR)
    # 若是出现异常就打印异常
    except Exception as  ex:
        print(ex)
    # 最后中断实例的conn
    finally:
        conn.close()
if __name__ == '__main__':
    server(8001)

 

socket client(屡次开启,测试访问):
import socket

# 连接服务端
HOST = 'localhost'    # The remote host
PORT = 8001           # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

# 数据请求
while True:
    msg = bytes(input(">>:"),encoding="utf8")
    s.sendall(msg)
    data = s.recv(1024)
    #print(data)

    # repr格式化输出
    print('Received', repr(data))
s.close()
相关文章
相关标签/搜索