【发布时间】:2016-01-28 17:44:18
【问题描述】:
我正在尝试执行从 websocket 客户端到服务器的恒定消息(python/flask/socketio)
我在一个简单的页面上有一个提交按钮,它启动了一项长期运行的工作。
$('form#emit').submit(function(event) {
socket.emit('submit', {...});
return false;
在 python 代码中,我像这样开始长期运行的工作:
@socketio.on('submit', namespace='/namespace')
def long_running_function(message):
long_running_job_code(message)
我期望发生的是 python 启动 long_running_job_code 并以 setInterval 的形式返回执行循环:
在客户端的“循环”:
setInterval(function() { pinger() }, 1000);
function pinger()
{
socket.emit('ping','test');
}
在服务器上:
@socketio.on('ping', namespace='/namespace')
def ping(message):
emit('my response', {'data': '.'})
在点击提交按钮之前,'ping' 函数正在将 .... 放置在屏幕上,但它不会在 long_running_job_code 执行时继续执行该函数。
我认为问题是在服务器端阻塞,但我不确定。长时间运行的作业具有仍在到达客户端的发射,但是在长时间运行的作业进行时,ping 发射停止。
有人知道如何解决这个问题吗?
谢谢!
【问题讨论】:
-
你指的是什么循环?我没有看到循环。您的问题是在服务器端还是在客户端阻塞?
-
本例中的“循环”是 setInterval(function()... 它每 1000 毫秒发出一次 ping
-
在长时间运行的作业完成后,该作业运行时发生的 ping 发射被转储到屏幕上,因此它似乎在假脱机直到长时间运行的作业完成。目标是让它同时做这两件事。
标签: python flask websocket socket.io