我目前正在学习 Flask,最近发现了 Flask-SocketIO。我了解到,该模块基于事件,以便客户端可以与服务器端进行通信,所以我尝试这样做。但是出于某种原因,我从客户端发送的事件不会发送到服务器。我已经尝试修复它几个小时,但我不明白我的代码有什么问题。谢谢你帮我!
main.py
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route("/", methods=["GET", "POST"])
def home():
return render_template("index.html")
@socketio.on('my event')
def handle_my_custom_event(json):
print('received json: ' + str(json))
if __name__ == "__main__":
socketio.run(app, debug=True)
/templates/index.html
<!DOCTYPE html>
<html lang="en">
<h1> Chat room</h1>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
var socket = io();
socket.on('connect', function() {
socket.emit('my event', {data: 'I\'m connected!'}); #Creating event when connected
});
</script>
</html>
答案 0 :(得分:1)
任何时候事情没有按照你认为的那样发展,你就必须在日志中寻找线索。在这种情况下,这意味着查看 Flask 进程的输出和浏览器控制台。
Flask 进程没有显示任何错误,但确实表明没有尝试连接 Socket.IO。所以实际上这不是没有接收到事件的问题,而是没有建立连接。
浏览器控制台显示:
Uncaught SyntaxError: Private field '#Creating' must be declared in an enclosing class
你看到问题了吗?您正在使用 #
开始评论。这应该是 JavaScript 中的 //
。