【发布时间】:2016-07-27 13:24:05
【问题描述】:
我正在尝试通过按下前端 HTML 上的按钮与我的后端 (Python 2.7 FLASK) 进行交互。
这是我期望的行为:
我的状态机处于等待状态(等待用户操作)
startEvent.wait()
当我按下 START 按钮时,我在后端设置了一个事件
@GUI.route('/ptu1', methods=['GET', 'POST'])
def startButton():
if request.method == 'POST':
startEvent.set()
return redirect(url_for('index'))
然后我用这样的 socketIO 在我的 html 页面上发送一条消息
socket_gui.emit('socket_field',
{'data': msg, 'count': self.count,'flag': 1},
namespace='/test')
收到此消息的javascript代码是:
socket.on('socket_field', function(msg) {
$('#Status').text(msg.data);
if (msg.flag == '1'){
//do things
}
if (msg.flag == '2'){
//do others things
}
});
目前,此代码有效,因为当我按下开始按钮时,它会发送事件,然后将套接字发送到执行我想要的操作的前端 javascript。
然后我进入等待模式(等待用户按下第二个按钮)
printEvent.wait()
socket_gui.emit('socket_field',
{'data': msg, 'count': self.count,'flag': 2},
namespace='/test')
我在点击按钮时设置事件:
@GUI.route('/print1', methods=['GET', 'POST'])
def printButton():
if request.method == 'POST':
printEvent.set()
return redirect(url_for('index'))
这是问题所在:开始按钮的第一步完美运行,发出套接字并且 javascript 接收它并按我想要的方式处理它。
但是当我按下打印按钮时,我可以在我的日志中看到套接字使用正确的 args 正确发出,但前端的 javascript 从未收到它。
似乎等待事件阻塞了发射套接字。
事实上,我尝试在等待之前使用套接字发送一条消息并且它正在工作。
我认为问题出在我使用的库中:evenlet 我尝试了一个 gevent 库,它可以工作,但速度不是那么快。 我想使用 eventlet 库,但我不知道如何解决我的问题。
【问题讨论】:
标签: javascript python sockets flask