zoukankan      html  css  js  c++  java
  • python3--socketIO_client 摸索怕坑指南

    前言:
    websocket和socketIO是全然不同的两个东西,websocket的话 使用自带ws的库就可以完成一些功能,但是socketIO属于sw的另外一块内容
    工作中遇到了一个监控socketIO传输的聊天信息监控的需求.研究了一阵 话不多说 上代码!

    from socketIO_client import SocketIO, BaseNamespace
    import time
    import requests
    import logging
    from app.test_report.constant import VIEWER_DATA, TEACHER_DATA, VIEWER_DATA_MUTIL, TEACHER_DATA_MUTIL    # 这里引入四个变量 放在flask里面起一个单独文件防止有坑!
    
    logging.getLogger('socketIO-client').setLevel(logging.DEBUG)
    
    logging.basicConfig()  # 调试时候可以自定义日志
    
    
    class TeacherNamespace(BaseNamespace):
    
        def on_teacher_response(self, *args):
            print('qqq', args, type(args))
    
    
    class ViewerNamespace(BaseNamespace):
    
        def on_viewer_response(self, *args):
            print(args, type(args))
    
    
    def get_sessionid(userid, roomid):
        pass
    
    
    def on_connect(*args):
        # print(*args)
        print('connect')
    
    
    def on_disconnect():
        print('## disconnect ##')
    
    
    def on_reconnect():
        print('reconnect')
    
    
    def revc_message(*args):    # 这个函数很重要 是socketio监听信息获取的函数, 这里面socketio会自行调用这个函数
        response_data_format = {}
    
        response_data = eval(args[0])
        print(response_data)
    
    
    def revc_message_mutil(*args):  # 这个函数很重要 是socketio监听信息获取的函数, 这里面socketio会自行调用这个函数
        response_data_format = {}
        response_data = eval(args[0])
        print(response_data)
    
    
    def create_params(userid,roomid):    # 这个方法类似requests库的封装方法 看底层貌似与requests的urllib3方法一样
        vsessionid, tsessionid = get_sessionid(userid, roomid)
        vparams = {
            'sessionid': vsessionid,
        }
        tparams = {
            'sessionid': tsessionid,
        }
        return vparams, tparams
    
    
    def sio(userid, roomid, host=' xxx.net', vparams='', tparams=''):
        if not vparams and not tparams:
            vparams, tparams = create_params(userid, roomid)
        vsocketIO = SocketIO(host, params=vparams)
        tsocketIO = SocketIO(host, params=tparams)
        viewer = vsocketIO.define(ViewerNamespace, path=f'/asjbfasbfk')    #  这个path类似于信道的路径 很重要
        teacher = tsocketIO.define(TeacherNamespace, path=f'/asjbfasbfk')    #  这个path类似于信道的路径 很重要
    
        viewer.on('connect', on_connect)
        viewer.on('chat_message', revc_message)
        viewer.on('disconnect', on_disconnect)
        viewer.on('reconnect', on_reconnect)
        teacher.on('connect', on_connect)
        teacher.on('chat_message', revc_message)
        teacher.on('disconnect', on_disconnect)
        teacher.on('reconnect', on_reconnect)
        return teacher, vsocketIO, tsocketIO
    
    
    def send_msg(domain_host, featurestype, sendmessage, userid, roomid, timer=1):
        teacher, vsocketIO, tsocketIO = sio(userid, roomid, host=domain_host)
        for i in range(timer):
            teacher.emit('chat_message', f'{sendmessage}', revc_message)
            vsocketIO.wait(seconds=1)
            tsocketIO.wait(seconds=1)
        return VIEWER_DATA, TEACHER_DATA
    
    
    def send_msg_mutil(domain_host, featurestype, sendmessage, userid, roomid, timer=1, vparams='', tparams=''):
        teacher, vsocketIO, tsocketIO = sio(userid, roomid, host=domain_host, vparams=vparams, tparams=tparams)
        for i in range(timer):
            teacher.emit('chat_message', f'{sendmessage}', revc_message_mutil)
            vsocketIO.wait(seconds=1)
            tsocketIO.wait(seconds=1)
        return VIEWER_DATA, TEACHER_DATA
    
    
    def clear_data():
        VIEWER_DATA.clear()
        TEACHER_DATA.clear()
    
    if __name__ == '__main__':
        s = time.time()
        print(send_msg('xxxx.net', 1, '发送信息1', '7848DB3F76g7ts7057F', 'E301DFFFCDDAG7S79GY9A01307461'))
        print(time.time()-s)
        clear_data()
    
  • 相关阅读:
    iOS蓝牙开发(4.0)详解
    iOS开发--MQTT实时处理数据
    BBWebImage 设计思路
    SDWebImage 加载显示 GIF 与性能问题
    iOS 图片压缩方法
    SDWebImage 加载显示 WebP 与性能问题
    NSTimer、CADisplayLink 内存泄漏
    iOS 使用矢量图
    LeetCode #36 Valid Sudoku
    LeetCode #35 Search Insert Position
  • 原文地址:https://www.cnblogs.com/lyoko1996/p/13517113.html
Copyright © 2011-2022 走看看