【发布时间】:2016-04-19 03:38:29
【问题描述】:
这似乎是一个非常简单的问题,但它让我感到困惑,我有一个 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>
我看到双方都连接了(即双方都触发了连接事件),但没有收到我从页面发送到服务器的任何内容。我猜想我的东西配置错误,但正在建立的连接让我不这么认为。
【问题讨论】:
-
"test" 不是有效消息 ... socketio 接口只有“connect”、“disconnect”和“message” ...我认为...无论如何你需要一个 on_message 处理程序您解析出有关该做什么的其他信息...
-
@JoranBeasley 有趣的是,Flask-SocketIO 文档显示:
@socketio.on('my event') def handle_my_custom_event(json):以及从 HTML 页面发送的相应消息:socket.emit('my event', {data: 'I\'m connected!'});所以我想我假设不称为“消息”的东西应该工作吗? -
我会使用一个按钮,
<button id="startBtn">Click me!</button>,然后是$('#startBtn').click(function() { ... }。我不确定捕捉“START”文本的点击是否有效。 -
@J.J.Hakala 它在控制台上打印“ok”,据我所知,应该也执行下一行
-
是的,我知道......我花了一些时间搞砸这个(也许没有足够的时间),最后只使用了 on("message") 和 json.encoding 一个包含“my_custom_event”或其他内容的有效负载...
标签: python flask websocket socket.io