首页 > 代码库 > Flask-SocketIO中实例代码的阅读笔记
Flask-SocketIO中实例代码的阅读笔记
Flask-SocketIO:
支持没有WebSocket支持的Old浏览器
支持SocketIO Javascript 库的message passing protocol
-----------------------------------
SocketIO的核心概念:
命名空间 -> 事件类别
------------------------------------
说明:整个测试程序只使用了一个命名空间:/test
index.html
一:客户端程序的处理流程
1,建立连接,注册命名空间
var socket = io.connect(‘http://‘ + document.domain + ‘:‘ + location.port + namespace);
2,注册监听的事件,如下面的‘my response‘ (示例程序就这一个服务器发送的事件类别)
socket.on(‘my response‘, function(msg) {
$(‘#log‘).append(‘<br>Received #‘ + msg.count + ‘: ‘ + msg.data);
});
3, 向服务器发送事件,如下的事件类别为 ‘my event‘
socket.emit(‘my event‘, {data: $(‘#emit_data‘).val()});
---------------------
服务端的处理:
1,就干一件事,将一个命名空间(可选,如下的‘/test‘)的一个事件类别(如下的‘my event‘)对应一个处理函数(下面的test_message)
2,注意服务器发送的是receive_count事件,并没有指定命名空间。可以使用room或者broadcast参数。
3,不论room还是broadcast的缺点就是自身也会收到该消息,这在协调办公等应用里面会产生问题,需要自己实现?
@socketio.on(‘my event‘, namespace=‘/test‘)
def test_message(message):
session[‘receive_count‘] = session.get(‘receive_count‘, 0) + 1
emit(‘my response‘,
{‘data‘: message[‘data‘], ‘count‘: session[‘receive_count‘]})
emit(‘my response‘,
{‘data‘: message[‘data‘], ‘count‘: session[‘receive_count‘]},
broadcast=True)
-----------------
存在的问题:
在Windows8/Python2.7 64bit下,
1, WingIDE下无法调试,实际上有两个python.exe进程,设置的断点无效。
原因:flask_socketio/__init__.py run()函数调用了run_with_reloader
解决方法:将app.py中的app.debug = True这行注释掉。
因为开启了Debug模式所以导致了无法调试,真是。。。
Flask-SocketIO中实例代码的阅读笔记