现在就是有个长轮询的场景, 反正结果是在 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
|