当前位置: 首页 > java >正文

python+flask+flask-sockerio,部署后sockerio通信异常

前言

用python开发了一个flask web服务,前端用html,前后端通过socketio通信,开发环境,windows+miniconda+vscode,开发完成后本地运行没有问题,然后就开始部署,噩梦就开始了。

问题描述

程序是部署在公司的服务器上,运行在docker容器中,容器启动后运行脚本,前端页面跳转正常,但就是后端与前端的socketio通信不正常,具体表现为:前端的client与后端服务器建立连接之后,后端向前端发送的第一条消息还能接收到,后面的消息就收不到了,socketio.on监听不到消息,见隔一段时间sockerio.on(‘disconnect’)监听到断开,然后会重连,但是通信一直异常。

解决过程

通过上网搜索包括借助ai,一点点排查,首先网络问题可以排除,我的前后端代码在一起,部署在一个容器中,不会有网络通信的问题;再就是usgi部署的问题,我换了好几种方案,都不行,而且本地运行是可以的,也排除掉;然后就是库版本不兼容的问题,我把python库的版本严格保持与本地运行环境一致,还是没有解决;可疑性最大的就是跨域问题,一开始也怀疑过这个可能,根据网上的文章对flask-sockerio和eventlet也进行了跨域的配置,但是依然没解决。还有什么配置心跳间隔和超时时间也都试过了,没用。

耗了两天我实在没辙了,想放弃了,就直接用nginx做了反向代理,在本地运行脚本,临时先用着。在部署的过程当中就遇到了跨域问题,给flask-socketio添加了cors_allowed_origins参数,解决了。

后来就像先用nginx的方案临时代替,先用着,后面慢慢部署,然后最后运行了一次脚本,结果问题解决掉了。赶紧对比前后差异,发现问题在异步通信上。

添加这个之后就好了。

import eventlet
eventlet.monkey_patch()

起始之前用wsgi部署的时候就添加过了,在一个单独的脚本里,但是不知道当时是有啥其他问题没能成功,后来的调试都是运行的主脚本,没有这段代码,所以一直没有发现问题。

因为自己对sockerio的通信不是很熟,所以只能分析到这了,现在问题解决了,后面运行再看看是否有其他问题。

http://www.xdnf.cn/news/2308.html

相关文章:

  • vue中将html2canvas转成的图片传递给后台 Python Flask 服务
  • C#中属性和字段的区别
  • 毕业设计-基于机器学习入侵检测系统
  • Java学习手册:Java开发常用的内置工具类包
  • c语言知识整理
  • ADC单通道采集实验
  • 农经权利用mdb与dbf生成公示表
  • 上位机知识篇---寻址方式
  • 通过gap看margin和padding在布局中的应用
  • 摩尔投票法详细介绍
  • void指针为何能幻化有数据类型?
  • Linux下的I/O复用技术之epoll
  • Linux:进程间通信->命名管道
  • 【WSL】wsl2出现Exec format error的解决办法
  • 矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理
  • Java 线程的六种状态与完整生命周期详解
  • YOLOv8改进新路径:Damo-YOLO与Dyhead融合的创新检测策略
  • C语言学习之调试
  • 小白自学python第三天
  • 当高级辅助驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • Python类和对象四(十三)
  • 2025雅思口语工具Top10:AI软件真实测评
  • 在springboot项目中,如何进行excel表格的导入导出功能?
  • JavaScript基础-算数运算符
  • (四) 实战Trae 编译调试C++项目(以minidocx为例)
  • Winform(2.多线程)
  • C19-while循环及for循环等价引入
  • CANFD技术在实时运动控制系统中的应用:协议解析、性能测试与未来发展趋势
  • (23)VTK C++开发示例 --- 读取所有的PolyData类型示例
  • 网络管理知识点