美文网首页
flask-socket 学习记录

flask-socket 学习记录

作者: 东京的雨不会淋湿首尔 | 来源:发表于2017-11-12 01:02 被阅读510次

简介

粗略版1

安装

<script src="https://cdn.bootcss.com/socket.io/2.0.3/socket.io.slim.js"></script>

pip install flask-socketio

使用

1.客户端向服务器发送匿名消息和自定义消息

socket.on('connect', function() {
        //客户端通过emit发送的命名事件数据,服务端只能使用对应自定义事件接收处理,
        //客户端定义的事件回调函数接收的数据来自于服务端对应事件处理函数的返回值
        socket.emit('my event', {data: 'I\'m connected!'},function (res) {
            console.log('my event :',res)
        });
        //send 发送未命名时间事件数据,flask 使用'message' 接收
        socket.send({'data': 'hello word!'}, function(data){
            console.log('#=> recive server data', data.data);
        });
    });
    from flask_socketio import SocketIO
    io = SocketIO(app)
    @io.on('message') #接收匿名send消息
    def message_handler(*args):
        print  'recive {0} data from client'.format(type(args[0])), args
        return args

    @io.on('my event') #接收emit 的 myevent 消息
    def my_event(data):
        print data
        return 'my event received'

服务器


image.png

chrome 客户端


image.png

2.服务器向客户端发送匿名消息和自定义消息

    #当收到客户端确认后的回调函数
    def message_event_callback(*args):
        print 'client called {0}'.format(args)

    # 服务器发送匿名事件
    @io.on('connect')
    def connect_event_handler():
        io.send({'data':'服务器发送了匿名事件数据'}, callback = message_event_callback)
    #服务器发送名为名为 connect event 的消息
    @io.on('connect')
    def connect_event_handler2():
        io.emit('connect event',
        {'data': '服务器发送了自定义事件数据'},
        callback = message_event_callback
        )

chrome 客户端

        //接收服务器的匿名消息,类型 message
        //func是服务器传入的回调函数,在服务器发送信息,客户端收到确认后在客户端执行
        socket.on('message', function(data, func){
              console.log('chrome 收到匿名事件数据', data.data);
              func('chrome 已经收到匿名事件数据');//客户端确认好后向服务器定义好的回调函数传递参数
            });
        //接收服务器的自定义事件数据
        socket.on('connect event', function(data, func){
              console.log('服务器发送了自定义事件消息 recive server data', data.data);
              func('chrome 已经收到connect event事件数据');
        });

2个消息结果如下:
自定义事件


image.png
image.png

匿名事件


image.png
image.png

3.错误处理

# 说明: 处理指定NameSpace的异常
@io.on_error()
def error_handler(e):
    print request.event[‘message‘]
    print request.event[‘args‘]
# 说明: 处理所有NameSpace的异常
@io.on_error_default
def default_error_handler(e):
    print request.event[‘message‘]
    print request.event[‘args‘]

说明: request.event是在被io.on装饰的时候被附加上去的属性,是一个字典,默认包含message和args,也就是事件名和事件相关的参数,在出现异常时可通过打印它们来获取异常请求信息.

相关文章

网友评论

      本文标题:flask-socket 学习记录

      本文链接:https://www.haomeiwen.com/subject/rzjgmxtx.html