首页 > 其他 > 详细

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

时间:2019-11-02 21:07:57      阅读:90      评论:0      收藏:0      [点我收藏+]

服务端:

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)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!