使用套接字

时间:2015-05-14 11:59:38

标签: python sockets flask flask-socketio

我正在构建使用套接字(flask socketio)的python Flask应用程序。基本上,客户端会将一些命令发送到他想要执行的服务器。服务器将执行命令并将套接字发送到客户端命令输出。

有处理器功能接收来自用户的请求。该函数将执行命令并将大量套接字发送回客户端。也可以使用stdout和stderr线程。

@socket.on ('run-code')
@authenticated_only
def socket_run_code_request (request):
  # run command
  # emit socket for each line of output

如果flask应用程序处于调试模式,则函数内部发出的套接字将在函数结束前到达客户端(这是可取的)。 但是如果调试关闭,所有套接字都会以某种方式排队并在函数结束后发送。没有来自服务器的实时响应,只是

点击执行 - > 等一下 - > 这是您的输出

而不是:

点击执行 - > 这里有点输出 - > 这是另一条线 - > ...

我已阅读Flask文档但调试的说明为following

  

如果启用调试支持,服务器将在代码更改时重新加载,如果出现问题,它还将为您提供有用的调试器

有没有办法告诉Flask立即发送所有内容,或者有些想法如何解决这个问题?它可能与烧瓶的flask-socketio插件有关

非常感谢您的反馈:)

1 个答案:

答案 0 :(得分:2)

我的猜测是问题是你没有修补标准库,因此你所做的所有这些调用都支持对异步进程的监视阻塞。在调试模式下,Flask-SocketIO会进行猴子修补,因为如果没有它,Flask重新加载器就无法工作。

要修补补丁,只需在主Python脚本的最顶部添加以下内容:

from gevent import monkey
monkey.patch_all()