基于协程实现并发的套接字通信

服务端:

from gevent import monkey,spawn;monkey.patch_all()
from threading import Thread
from socket import *

def talk(conn):    #跟建好的连接进行通讯
    while True:
        try:
            data=conn.recv(1024)
            if not data:break
            conn.send(data.upper())
        except ConnectionResetError:
            break
    conn.close()


def server(ip,port,backlog=5):
    s = socket()
    s.bind((ip,port))
    s.listen(backlog)

    while True:
        conn, addr = s.accept()   #建连接
        print(addr)

        # 通信
        g=spawn(talk,conn)     #提交一个协程任务,进行通讯。在多个客户端之间来回切换
                             #切的速度非常快,多个客户端都得到及时响应

    s.close()

if __name__ == '__main__':
    spawn(server,'127.0.0.1',8080).join()
    # server(('127.0.0.1',8080))   #和上面一步效果相同

客户端:

from threading import Thread,current_thread
from socket import *

import os

def client():
    client = socket()
    client.connect(('127.0.0.1', 8080))

    while True:
        data = '%s hello' % current_thread().name
        client.send(data.encode('utf-8'))
        res = client.recv(1024)
        print(res.decode('utf-8'))


if __name__ == '__main__':
    for i in range(1000):    #建500个线程连接服务端进行通信,相当于并发500个客户端
        t=Thread(target=client)
        t.start()
原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/11783714.html