码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-19 15:37:55      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:client   bin   并发   ==   list   soc   coding   put   false   

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一样

标签:client   bin   并发   ==   list   soc   coding   put   false   

原文地址:https://www.cnblogs.com/alex-hrg/p/9060357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!