
现在就是有个长轮询的场景, 反正结果是在 redis 中, 现在就是考虑更好的进行交互。
后端架构 flask + gunicorn (后期在加 nginx 均衡 多台服务器) gunicorn 采用多进程+ 多线程 配置
下面是官网原话
带有 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 部署过的。有什么要注意的吗? 资料太少了
1 superrichman 2022-10-08 18:28:17 +08:00 via Android nginx 用 iphash |
2 hhhhhh123 OP @superrichman ok , wo 看看 |
3 dongtingyue 2022-10-08 19:23:20 +08:00 http 不会比 socket 压力大,socket 反而要一直保持连接。 |
4 ixuuux 2022-10-08 23:12:14 +08:00 via iPhone 客户端 http 轮询,每次请求过来,服务端阻塞住,比如阻塞个一分钟两分钟的,在阻塞的这段时间内,服务端一直查询相应的数据,查询到了或者规定的阻塞时间到了,返回响应,客户端相应的延长超时等待。 我之前这么干过,场景是客户端取任务,服务端需要从 redis 队列中取任务,服务端的阻塞其实就是从 redis 队列中阻塞取数据,运行良好没啥问题,仅供参考。 |
5 hhhhhh123 OP @dongtingyue http 每次都要建立连接的 |
6 hhhhhh123 OP @dongtingyue 每次建立连接释放 三次握手四次挥手 |
7 Soaringflight 2022-10-09 09:25:42 +08:00 via iPhone 可以用 tornado 的 websocket ,我们用这个做过实时聊天。 |
8 fcfangcc 2022-10-09 09:36:41 +08:00 关键字:长轮询 |
9 lscexpress 2022-10-09 10:16:27 +08:00 web 页面支付回调?那么就用轮询。 web 页面聊天?那肯定 socketio 。 你的服务器带宽足够,然后 linux 也优化过,那么单机 socketio 2w+的链接不成问题(因为我目前做过的业务,最多就这么多)。如果这个数据还不满足,那么说明你们业务很大了,也很挣钱了,那就花钱请更专业更厉害的人帮你解决吧。 |
10 hhhhhh123 OP @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 这种日志有很多 这是啥原因呀? 有没有发消息 只是建立了连接 |
11 lscexpress 2022-10-09 13:57:48 +08:00 有日志是正常的,其余的我回答不了你,因为程序是你在写,云调试的前提是开源项目。 介于你表现的比较新手的感觉,我友善提醒一点。socketio 是一个库,用于实现双端通信,socketio 包含但不等于 websocket 。在 websocket 无法建立的时候,socketio 就会 http 轮询。 |
12 dongtingyue 2022-10-09 18:41:57 +08:00 @hhhhhh123 keepalive |