这似乎是一个非常简单的问题,但它让我感到困惑,我有一个Flask应用程序,它提供一个网页并通过Socket.io与该页面进行通信。 Flask应用程序如下所示:
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on_error()
def error_handler(e):
print e
#this fires
@socketio.on("connect")
def connect():
print "connected"
#this does not
@socketio.on('test')
def test_handler(message):
print "TEST WORKS"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
socketio.run(app)
我的页面非常简单:
<!doctype html>
<html>
<head>
<title>Flask Socket.IO test</title>
<style>
body { font: 13px Helvetica, Arial; }
</style>
<script src="socket.io-1.4.3.js"></script>
<script src="jquery-2.2.0.min.js"></script>
<script>
var socket = io("192.168.42.1:5000");
socket.on('connect', function() {
console.log(" connected ");
});
$(document).ready( function() {
$( '.startBtn' ).click(function() {
console.log("ok");
socket.emit('test', {data:"start!"});
});
});
</script>
</head>
<body>
<div class="startBtn">
<h1>START</h1>
</div>
</body>
</html>
我在双方都看到他们连接(即双方都触发了连接事件)但是我没有收到从页面发送到服务器的任何信息。我猜不知道我有什么东西配置错误但是建立连接让我想到了。
答案 0 :(得分:4)
所以问题似乎在于我如何设置Flask应用程序和socketio。将其更改为:
app = Flask(__name__)
socketio = SocketIO(app, async_mode='eventlet')
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('test')
def josh_test(message):
print "test"
if __name__ == '__main__':
socketio.run(app, debug=True)
现在一切都运行得非常好,没有对HTML文件进行任何更改。我以前的版本有:
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
socketio.run(app)
这就是造成问题的原因。