我想通過按我的前端HTML上的按鈕來與我的後端(Python 2.7 FLASK)交互。在庫中使用FLASK socketIO的奇怪行爲庫eventlet
這裏的行爲我想到:
我的狀態機處於等待狀態(等待用戶操作)
startEvent.wait()
當我按下按鈕開始,我在我的後面設置一個事件最終
@GUI.route('/ptu1', methods=['GET', 'POST'])
def startButton():
if request.method == 'POST':
startEvent.set()
return redirect(url_for('index'))
然後我在我的html頁面上發送消息與socketIO這樣
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接收它並將其視爲我想要的。
但是當我按下打印按鈕時,我可以在我的日誌中看到,套接字正確地使用了良好的參數,但前端的JavaScript從未收到它。
看來,等待事件阻止發射套接字。
事實上,我試圖在等待之前發送帶有套接字的消息並且它正在工作。
我認爲這個問題出現在我使用的庫中:evenlet 我嘗試了一個gevent庫,但它工作起來,但速度並不快。 我想使用eventlet庫,但我不知道如何解決我的問題。