zoukankan      html  css  js  c++  java
  • 在单线程下利用协程实现服务端并发的效果

    import socket
    from threading import Thread
    
    
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    def c(client,i):
        while True:
            client.send(('hello %s'%i).encode("utf-8"))
            data = client.recv(1024)
            print(data.decode('utf-8'))
    
    for i in range(400):
        t = Thread(target=c,args=(client,i))  # 客户端使用多线程实现并发模拟
        t.start()
    客户端
    import socket
    from gevent import spawn
    from gevent import monkey;
    
    monkey.patch_all()
    
    
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    
    
    def talk(conn):
        while True:
            try:
                data = conn.recv(1024)  # 等待客户端发消息 阻塞态
                if len(data) == 0: break
                print(data.decode('utf-8'))
                conn.send(data.upper())
            except ConnectionResetError as e:
                print(e)
                break
        conn.close()
    
    
    def c():
        while True:
            conn, addr = server.accept()  # 监听 等待客户端的连接  阻塞态
            spawn(talk,conn)
    
    
    s1 = spawn(c)
    s1.join()
    服务端
  • 相关阅读:
    Luogu 1514 引水入城
    HDU 2196 Computer
    CF460C Present
    初等数论整理
    2019UMS培训day6解题报告
    2019UMS培训day5解题报告
    2019UMS培训day3解题报告
    Luogu 1731 生日蛋糕
    JavaWeb之ServletContext域对象
    c3p0连接池
  • 原文地址:https://www.cnblogs.com/le-le666/p/11357921.html
Copyright © 2011-2022 走看看