首页 > 代码库 > 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中实例代码的阅读笔记