当某个事件发生时,Flask服务器会将所有连接的客户端重定向到某个页面



我对Flask、JavaScript、HTML等都很陌生。所以,这可能是一个愚蠢的问题。

我有一个连接了一个客户端的Flask服务器。当这个客户端按下一个按钮时,服务器会向它发送一个新页面。这很简单,我知道怎么做。

现在,假设有多个客户端连接到服务器。当其中一个客户端按下按钮时,是否有可能以及如何将新页面发送给所有客户端?我已经尝试过使用socketIO,我能够让服务器捕捉按钮点击,并向所有客户端发回短信,但这终止了我的成功。我无法在所有客户端更改页面。

当客户端连接到127.0.0.1:5000时,服务器会呈现index.html

@app.route('/')
def index():
return render_template('index.html')

这是index.html

<body>
<input type="text" id="message">

<button id="send">Send</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.min.js"></script>
<script
src="https://code.jquery.com/jquery-3.6.0.js"
integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
crossorigin="anonymous"></script>
<script src="{{ url_for('static', filename='script.js')}}"></script>
</body>

这是js文件

$(document).ready(function() {
var socket = io.connect('http://127.0.0.1:5000');
$('#send').on('click', function() {
var message = $('#message').val();
socket.emit('message from user', message);
});
socket.on('from Flask', function(msg) {
alert(msg);
});
...

当用户单击按钮时,服务器会弹出客户端发送的消息,并将其广播给所有连接的客户端。然后,每个客户端都会在弹出窗口中显示它。

@socketio.on('message from user')
def receive_message_from_user(message):
print ('USER MESSAGE {}'.format(message))
emit ('from Flask', message.upper(), broadcast=True)

我的意图是,每个客户端都转到不同的页面,而不是从服务器接收此消息。

我已经审阅了代码。"来自弗拉斯克"的广播确实有效。

@socketio.on('message from user')
def receive_message_from_user(message):
print ('USER MESSAGE {}'.format(message))
emit('from Flask', message.upper(), broadcast=True)
emit('redirect', {'url': url_for('home')}, broadcast=True)

(js(

socket.on('from Flask', function(msg) {
alert("from flask: " + msg);
});

可能让你感到困惑的是,只有当你不在索引页中时,它才有效,这是因为主页没有导入script.js。这会使消息出现(尽管你可能想要两个不同的脚本,否则在主页上也会激活重定向(。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h1>Home!!</h1>
<script src="{{ url_for('static', filename='script.js')}}"></script>
</body>
</html>

最新更新