在练习中,我试图让Flask服务器不断打印"你好"到HTML页面的控制台。我现在迷失了如何继续。
目前,我的服务器代码看起来像这样
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('message')
def handle_message(message):
print('Message: ' + message)
send(message)
@socketio.on('json')
def handle_json(json):
send(json, json=True)
@socketio.on('my event')
def handle_my_custom_event(json):
emit('my response', json, broadcast=True)
def hello():
emit('message', {'hello':"Hello"})
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
socketio.run(app)
while True:
hello()
虽然我的客户端代码如下所示:
<head>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
socket.emit('connected');
});
socket.on('message', function(data) {
console.log(data);
});
</script>
</head>
但是我的控制台日志中没有得到任何内容。如何让它将Flask服务器发送的消息打印到控制台?我做错了什么?
我现在明白了,它应该打印JSON而不是&#34; Hello&#34;字符串,这也没问题。我只想从服务器上在Web控制台上打印一些内容。
答案 0 :(得分:6)
这是一个简单的示例,说明如何连接到SocketIO服务器并在该连接上从服务器接收消息。
<强> app.py 强>
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('connect')
def connect():
emit('message', {'hello': "Hello"})
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
socketio.run(app, debug=True)
<强>模板/ index.html中强>
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
console.log('connected');
});
socket.on('message', function(data) {
console.log(data);
});
</script>
</head>
修改强>
要让服务器每五秒发送一次socketio消息,您可以使用后台线程:
<强> app.py 强>
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import time
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
thread = None
def background_thread():
while True:
socketio.emit('message', {'goodbye': "Goodbye"})
time.sleep(5)
@socketio.on('connect')
def connect():
global thread
if thread is None:
thread = socketio.start_background_task(target=background_thread)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
socketio.run(app, debug=True)