现在就是有个长轮询的场景, 反正结果是在 redis 中, 现在就是考虑更好的进行交互。
- http 长轮询, 不过缺点挺明显的。1.不及时(假设 1s),2.服务器压力大
- socketIo 为什么用 socketIo 因为 socket 一对多要开很多线程,socketIo 支持异步, 原理没有深究 都是第一次用。
后端架构 flask + gunicorn (后期在加 nginx 均衡 多台服务器) gunicorn 采用多进程+ 多线程 配置
- 如果是用 http 轮询的话,除了压力比 socketIO 大,感觉问题不大。(采用这个方案更简单实现)
- 如果用 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 部署过的。有什么要注意的吗? 资料太少了
