flask socketio,有时客户呼叫冻结

2024-09-24 00:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我偶尔会遇到烧瓶插座结冰的问题,我不知道该怎么解决。在

我的客户机连接到我的socket io服务器并执行一些聊天会话。效果很好。但是由于某些原因,有时从客户端,有一些调用阻塞了整个服务器(服务器被困在进程中,所有其他调用都被冻结)。奇怪的是,只要客户端应用程序不是完全的,服务器就可以被阻止关机。这个是一个ios应用程序/网页,我必须完全关闭该应用程序或safari页面。关闭套接字本身,甚至取消分配也不能解决问题。当应用程序在后台时,套接字将关闭并释放,但问题仍然存在。在

这是一个小型服务器,它同时处理html页面和socket服务器,所以我不知道是套接字本身还是html阻止了进程。但是每次服务器冻结时,日志都会显示一些套接字调用。在

以下是我如何配置我的服务器:

socketio = SocketIO(app, ping_timeout=5)
socketio.run(app, host='0.0.0.0', port=5001, debug=True, ssl_context=context)

所以我的问题是: 什么可以冻结服务器(当我不做任何事情而让应用程序或网站打开很长时间时,似乎会发生这种情况)。如果我正常使用服务,服务器永远不会冻结。以及如何防止这种情况的发生(即使我不知道是什么原因造成的,有没有一种方法可以盲目地阻止我的服务器被困在通话中?在

谢谢你的回答


Tags: 服务器app应用程序客户端烧瓶进程htmlcontext
1条回答
网友
1楼 · 发布于 2024-09-24 00:32:27

根据您上面的评论,您正在使用Flask development web服务器,而没有使用eventlet或gevent等异步框架的帮助。除了这个选项非常低效之外,您应该知道这个web服务器不是经过战斗测试的,它是用来在开发期间进行短期测试的。我不确定它是否能运行很长时间,特别是在Flask SocketIO提供的异常条件下,这是常规Flask应用程序无法运行的。我认为很有可能是你在Werkzeug中碰到了一些不知名的bug,导致它挂起。在

我的建议是安装eventlet并重试。您需要做的就是pip install eventlet,假设您没有传递显式的async_mode参数,那么只要安装这个包Flask SocketIO就可以配置自己使用它。在

我还将删除显式超时设置。在几乎所有情况下,默认值足以维持正常连接。在

相关问题 更多 >