[ Python ] 关于轮询的问题 http 还是 socketIO - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hhhhhh123
V2EX    程序员

[ Python ] 关于轮询的问题 http 还是 socketIO

 
  •   hhhhhh123 2022-10-08 17:30:51 +08:00 2270 次点击
    这是一个创建于 1175 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在就是有个长轮询的场景, 反正结果是在 redis 中, 现在就是考虑更好的进行交互。

    1. http 长轮询, 不过缺点挺明显的。1.不及时(假设 1s),2.服务器压力大
    2. socketIo 为什么用 socketIo 因为 socket 一对多要开很多线程,socketIo 支持异步, 原理没有深究 都是第一次用。

    后端架构 flask + gunicorn (后期在加 nginx 均衡 多台服务器) gunicorn 采用多进程+ 多线程 配置

    1. 如果是用 http 轮询的话,除了压力比 socketIO 大,感觉问题不大。(采用这个方案更简单实现)
    2. 如果用 socketIO ,那问题就多了, 官网显示 gunicorn + socketIO 只能采用单进程。而且如果要 nginx 动态均衡的话会出现 粘性会话 问题。

    下面是官网原话

    带有 Gunicorn 的 Eventlet 如上所述运行 eventlet WSGI 服务器的替代方法是使用 gunicorn ,这是一个功能齐全的纯 Python Web 服务器。gunicorn 下启动应用程序的命令如下所示: $ gunicorn -k eventlet -w 1 module:app 由于其负载均衡算法的限制,gunicorn 只能与一个工作进程一起使用,因此该-w 选项不能设置为大于 1 的值。单个 eventlet 工作人员可以处理大量并发客户端,每个客户端由一个 greenlet 处理. 

    采用 socketIO + nginx 动态均衡(假设端口 5000 ,5001) ,会出现 连接 5000 后,如何保证后续所有的 socketIo 请求 全部指向 5000 而不是 5001 ,反之一样。

    唉 如果采用 socketIO + Gunicorn 那么 Gunicorn 只能开一个进程。 如果采用 http + Gunicorn 可多进程多线程 但消息不及时。服务器压力大。感觉也不是很好。毕竟都 2022 了。

    个人还是倾向 socketIO , 很纠结啊 有没有经验的兄弟 socketIO + Gunicorn 部署过的。有什么要注意的吗? 资料太少了

    12 条回复    2022-10-09 18:41:57 +08:00
    superrichman
        1
    superrichman  
       2022-10-08 18:28:17 +08:00 via Android
    nginx 用 iphash
    hhhhhh123
        2
    hhhhhh123  
    OP
       2022-10-08 18:30:51 +08:00
    @superrichman ok , wo 看看
    dongtingyue
        3
    dongtingyue  
       2022-10-08 19:23:20 +08:00
    http 不会比 socket 压力大,socket 反而要一直保持连接。
    ixuuux
        4
    ixuuux  
       2022-10-08 23:12:14 +08:00 via iPhone
    客户端 http 轮询,每次请求过来,服务端阻塞住,比如阻塞个一分钟两分钟的,在阻塞的这段时间内,服务端一直查询相应的数据,查询到了或者规定的阻塞时间到了,返回响应,客户端相应的延长超时等待。

    我之前这么干过,场景是客户端取任务,服务端需要从 redis 队列中取任务,服务端的阻塞其实就是从 redis 队列中阻塞取数据,运行良好没啥问题,仅供参考。
    hhhhhh123
        5
    hhhhhh123  
    OP
       2022-10-09 08:55:27 +08:00
    @dongtingyue http 每次都要建立连接的
    hhhhhh123
        6
    hhhhhh123  
    OP
       2022-10-09 08:56:28 +08:00
    @dongtingyue 每次建立连接释放 三次握手四次挥手
    Soaringflight
        7
    Soaringflight  
       2022-10-09 09:25:42 +08:00 via iPhone
    可以用 tornado 的 websocket ,我们用这个做过实时聊天。
    fcfangcc
        8
    fcfangcc  
       2022-10-09 09:36:41 +08:00
    关键字:长轮询
    lscexpress
        9
    lscexpress  
       2022-10-09 10:16:27 +08:00
    web 页面支付回调?那么就用轮询。
    web 页面聊天?那肯定 socketio 。

    你的服务器带宽足够,然后 linux 也优化过,那么单机 socketio 2w+的链接不成问题(因为我目前做过的业务,最多就这么多)。如果这个数据还不满足,那么说明你们业务很大了,也很挣钱了,那就花钱请更专业更厉害的人帮你解决吧。
    hhhhhh123
        10
    hhhhhh123  
    OP
       2022-10-09 11:10:12 +08:00
    @lscexpress RGBbCB_sMygtvVE9AAAA: Sending packet PING data None
    gmEyC5Sj3nARgQ3aAAAB: Sending packet PING data None
    l3DRs5EnjDWGkUS1AAAC: Sending packet PING data None
    gmEyC5Sj3nARgQ3aAAAB: Received packet PONG data
    这种日志有很多 这是啥原因呀? 有没有发消息 只是建立了连接
    lscexpress
        11
    lscexpress  
       2022-10-09 13:57:48 +08:00
    有日志是正常的,其余的我回答不了你,因为程序是你在写,云调试的前提是开源项目。

    介于你表现的比较新手的感觉,我友善提醒一点。socketio 是一个库,用于实现双端通信,socketio 包含但不等于 websocket 。在 websocket 无法建立的时候,socketio 就会 http 轮询。
    dongtingyue
        12
    dongtingyue  
       2022-10-09 18:41:57 +08:00
    @hhhhhh123 keepalive
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3476 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:11 PVG 08:11 LAX 16:11 JFK 19:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86