【发布时间】:2018-09-29 18:00:56
【问题描述】:
我需要将我的 python Flask Web 应用程序和通过 socketio 通信的运行代码分开。我能够从外部 python 程序获取消息到网络,但我无法从 python 程序检测到的网络获取事件。实际上,我希望当用户按下网页上的按钮时,外部 python 代码将打印到终端一个 hello world 消息。在这个 html 的控制台中,我肯定会看到“按下按钮”。
<html>
<head>
<title>Listener</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.8/socket.io.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
var socket = io.connect();
$('#mybutton').on('click', function() {
socket.emit('my event', 'yodle');
console.log('Button pressed');
});
});
</script>
<button id="mybutton">Push Me!</button>
</body>
</html>
这是我的基本 Flask 网络服务器代码,它正在工作:
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'froggy'
app.debug = True
socketio = SocketIO(app, message_queue='redis://')
@app.route("/")
def index():
return render_template("index.html")
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0')
这是我单独运行的程序,按下按钮时不会向终端打印任何内容:
from flask_socketio import SocketIO
socketio = SocketIO(message_queue='redis://', host='0.0.0.0')
def my_function_handler(data):
print("Hello World")
if __name__ == '__main__':
while True:
socketio.on_event('my event', my_function_handler)
谁能指出我哪里出错了?非常感谢!
【问题讨论】:
标签: python socket.io flask-socketio