如何将消息从Flask服务器(Python)发送到HTML客户端?
为了练习,我试图让Flask服务器不断地向HTML页面的控制台打印“Hello”。我现在不知道如何继续 目前,我的服务器代码如下所示如何将消息从Flask服务器(Python)发送到HTML客户端?,python,web-applications,flask,websocket,send,Python,Web Applications,Flask,Websocket,Send,为了练习,我试图让Flask服务器不断地向HTML页面的控制台打印“Hello”。我现在不知道如何继续 目前,我的服务器代码如下所示 app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app) @socketio.on('message') def handle_message(message): print('Message: ' + message) send
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>
var socket=io.connect('http://'+document.domain+':'+location.port);
socket.on('connect',function(){
socket.emit('connected');
});
socket.on('message',函数(数据){
控制台日志(数据);
});
但是我的控制台日志中没有关于这个页面的任何内容。如何让它打印从Flask服务器发送到控制台的消息?我做错了什么
我现在明白了,它应该打印JSON而不是“Hello”字符串,这也没关系。我只想从服务器在web控制台上打印一些内容。下面是一个简单的示例,演示如何连接到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)
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)
模板/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>
令人惊叹的!!如何让它定期发送消息(比如每5秒一次)?通常情况下,您只会让服务器在发生某些事件时向连接的客户端发送消息。服务器仅仅连续发送相同的消息是没有意义的。但是如果你真的想走这条路,你可以启动一个后台线程,每五秒钟发出一条socketio消息。谢谢你的帮助!你介意也提供一个这样的例子吗(我在网上找到了一个例子,试了试,但没有成功)?出于某种原因,第二个例子不起作用。Python输出被卡在“(7134)wsgi上,在(7134)上启动时被接受('127.0.0.1',63548)”,web控制台说“ET net::ERR_CONNECTION_densed”,出于某种原因,我不得不添加“import eventlet eventlet.monkey_patch()”,它成功了!非常感谢你的帮助!