zoukankan      html  css  js  c++  java
  • 基于协程实现并发的套接字通信

    服务端:

    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()
  • 相关阅读:
    HDU 2586 How far away?
    UVAlive 5796 Hedge Mazes
    HDU 4975 A simple Gaussian elimination problem.
    Poj 1149 PIGS
    HDU 3416 Marriage Match IV
    HDU 4912 Paths on the tree
    HDU 3277 Marriage Match III
    終於記起了帳號密碼
    codeforces194a
    codeforces195c
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/11783714.html
Copyright © 2011-2022 走看看