协程实现多并发socket,跟NGINX一样

Posted alex_huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协程实现多并发socket,跟NGINX一样相关的知识,希望对你有一定的参考价值。

server:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
import gevent
from gevent import socket
def server(port):
    s = socket.socket()
    s.bind((‘0.0.0.0‘, port))
    s.listen(500)
    while True:
        conn,addr = s.accept()  #等待连接进来,没有连接一直挂起
        gevent.spawn(func,conn) #进来连接了,交给协程执行func函数,func无限收发数据,这中间遇到io切换
def func(conn):
    try:
        while True:
            recv = conn.recv(8096)
            print("recv:%s" %recv.decode())
            resp = recv.decode().upper()
            conn.send(resp.encode())
    except Exception as e:
        print(e)
    finally:
        conn.close()
if __name__ == ‘__main__‘:
    server(5000)

  client:

import socket
sock = socket.socket()
sock.connect((‘127.0.0.1‘,5000))
flag = False
while not flag:
    data = input(">>:").strip()
    if len(data) == 0:continue
    sock.send(data.encode())  #如果是发送一个空值,虽然显示是发出去了,但对方却认为你没发
    recv_data = sock.recv(8096)
    print("recv:",recv_data.decode())
sock.close()

  

以上是关于协程实现多并发socket,跟NGINX一样的主要内容,如果未能解决你的问题,请参考以下文章

系统性能常见问题

进程池线程池 协程

第十七节 单进程单线程非堵塞实现并发验证

20-揭秘Python协程

IO多路复用/基于IO多路复用+socket实现并发请求/协程

IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程