zoukankan      html  css  js  c++  java
  • gevent实现套接字

    server-------------

    #!/usr/bin/env python
    # encoding: utf-8  
    # Date: 2018/6/17

    from gevent import monkey,spawn;monkey.patch_all()
    from socket import *


    # 负责通信
    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):
        server = socket(AF_INET, SOCK_STREAM)
        server.bind((ip, port))
        server.listen(5)

        while True:
            conn, addr = server.accept()
            spawn(communicate, conn)  # 启动协程,这里不需要join,因为这里提交完,线程不会结束
        server.close()


    if __name__ == '__main__':
        g = spawn(server, '127.0.0.1', 8080)
        g.join()

    client------------

    #!/usr/bin/env python
    # encoding: utf-8  
    # Date: 2018/6/17

    # 客户端可以启动多个进程,启动一个就是一个进程
    from socket import *
    from threading import Thread,currentThread


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

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


    if __name__ == '__main__':
        for i in range(500):
            t = Thread(target=client)
            t.start()
    # 目前,服务端一个线程,可以抗住客户端500线程并发,
    # 如果再加上多进程,每个进程再开多个线程,每个线程再基于gevent模块把io解决了,程序效率就相当牛逼了

  • 相关阅读:
    VS2015安装水晶报表
    C# 通过java生成的RSA公钥加密和解密
    T4代码生成器
    产品开发- DFX
    读《31天学会CRM项目开发》记录3
    读《31天学会CRM项目开发》记录2
    读《31天学会CRM项目开发》记录1
    产品开发
    产品开发
    机器视觉
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9201318.html
Copyright © 2011-2022 走看看