问题描述
我在使用 Flask-SocketIO 时通过 Websockets 连接到我的服务器时遇到问题。如果我不指定自定义命名空间,一切都正常,但如果我想连接到命名空间,则无法连接。我做错了什么?
### removed to make the post less long,see below ###
我很确定我连接的客户端是错误的。但我不知道如何正确地做到这一点。我查看了 SocketIO Client 文档,但找不到帮助。
编辑:
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on("connect",namespace="/test")
def handle_connect():
print("heureka!")
return True
@app.route('/')
def index():
return """
<!DOCTYPE HTML>
<html>
<head>
<title>Flask-SocketIO Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js" integrity="sha512-aMGMvNYu8Ue4G+fHa359jcPb1u+ytAF+P2SCb+PxrjCdO3n3ZTxJ30zuH39rimUggmTwmh2u7wvQsDTHESnmfQ==" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
var socket1 = io("http://127.0.0.1:5000/test");
socket1.on("connect",function() {
console.log("yay!")
});
</script>
</head>
<body>
Testing
</body>
</html>
"""
socketio.run(app,debug=True,log_output=True,use_reloader=False)
我可以看到套接字在我的终端中发送的请求:
(6548) wsgi starting up on http://127.0.0.1:5000
(6548) accepted ('127.0.0.1',59354)
127.0.0.1 - - [30/Dec/2020 19:15:58] "GET / HTTP/1.1" 200 691 0.000000
127.0.0.1 - - [30/Dec/2020 19:15:58] "GET /socket.io/?EIO=4&transport=polling&t=NQqtHrO HTTP/1.1" 200 371 0.000997
127.0.0.1 - - [30/Dec/2020 19:15:59] "GET /socket.io/?EIO=4&transport=polling&t=NQqtI28 HTTP/1.1" 200 371 0.000997
127.0.0.1 - - [30/Dec/2020 19:16:00] "GET /socket.io/?EIO=4&transport=polling&t=NQqtILH HTTP/1.1" 200 371 0.000000
127.0.0.1 - - [30/Dec/2020 19:16:03] "GET /socket.io/?EIO=4&transport=polling&t=NQqtJ0u HTTP/1.1" 200 371 0.000996
127.0.0.1 - - [30/Dec/2020 19:16:08] "GET /socket.io/?EIO=4&transport=polling&t=NQqtKFD HTTP/1.1" 200 371 0.001002
127.0.0.1 - - [30/Dec/2020 19:16:13] "GET /socket.io/?EIO=4&transport=polling&t=NQqtLTa HTTP/1.1" 200 371 0.001024
解决方法
您使用的 path
选项不是用于指定命名空间,而是用于指示自定义 Socket.IO 端点。通常不需要设置路径。
命名空间在连接 URL 中给出:
var socket1 = io("/test");
或者,如果您更喜欢绝对网址:
var socket1 = io("http://localhost:5000/test");