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

时间:2019-11-02 21:07:57   收藏:0   阅读:93

服务端:

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

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!