jueqingsizhe66 / jueqingsizhe66.github.io

my hugo blogs
0 stars 0 forks source link

post/socket%E5%88%86%E5%8C%85%E7%B2%98%E5%8C%85/ #21

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

socket分包粘包 | 30年磨一剑

socket在发送数据的时候,如果数据返回过大,会分批次发送

https://jueqingsizhe66.github.io/post/socket%E5%88%86%E5%8C%85%E7%B2%98%E5%8C%85/

jueqingsizhe66 commented 2 years ago

*

* @author Zhaoliang Ye 叶昭良(zl_ye@qny.chng.com.cn)

* @version V0.1

* @Title: geventTCPServer.py

* @Description: 新建一个基于gevent协程的TCP server

很有用的协程高并发服务器 类似于ThreadingTCPServer

https://jueqingsizhe66.github.io/post/socket%E5%88%86%E5%8C%85%E7%B2%98%E5%8C%85/

* @Time: 2022/2/27 2:30

*

import gevent

from gevent import socket, monkey monkey.patch_all() ## 处理协程io异步问题

def server(port): print(f'{"gevent TCP socket服务启动中".center(100,"*")}') s = socket.socket() s.bind(('0.0.0.0', port)) ## 绑定port端口号 s.listen(500) ## 最多支持500个并发,其实可以不加500也可以 while True: cli, addr = s.accept() gevent.spawn(handle_request, cli)

def handle_request(conn): try: while True:

data = conn.recv(1024)

        data = conn.recv(10240) ## 客户端可能发过来内容过多可以加大字节数
        print("recv:", data)
        conn.send(data)
        if not data:
            conn.shutdown(socket.SHUT_WR)

except Exception as  ex:
    print(ex)
finally:
    conn.close()

if name == 'main': server(8081)

jueqingsizhe66 commented 2 years ago

gevent也可以实现高并发

jueqingsizhe66 commented 2 years ago

https://jueqingsizhe66.github.io/post/socket%E6%9D%A5%E6%BA%90/