python 基于 gevent 完成C/S 服务器协程多并发案例

gevent 解决单线程内并发
如果再配合多线程,那么可以优化更进一步优化扛住高并发

服务器


from gevent import monkey, spawn; monkey.patch_all()  # 使用gevent必须 调用  
import socket                                                          

def communicate(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):                                                  
    soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)            
    soc.bind((ip,port))                                                
    soc.listen(5)                                                      
    while True:                                                        
        conn, der = soc.accept()                                       
        spawn(communicate, conn)  # 协程开启处理IO问题                         
    soc.close()                                                        

if __name__ == '__main__':                                             
    g = spawn(server, '127.0.0.1', 8080)  # 开启协程, 异步提交                 
    g.join()                                                                                            

客户端


import socket
from threading import Thread,currentThread

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

    while True:
        soc.send(('%s hello' % currentThread().getName()).encode('utf-8'))
        data = soc.recv(1024)
        print(data.decode('utf-8'))

    soc.close()

if __name__ == '__main__':
    for i in range(500):  # 模拟500个 用户交互
        t = Thread(target=client)  # 线程开启
        t.start()                                                         

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值