• Websocket的长连接测试


    import websocket
    try:
        import thread
    except ImportError:
        import _thread as thread
    import time
    
    # 服务器推送消息时,message可以接收,然后进行下一步操作
    def on_message(ws, message):
        print(message)
    
    # 程序报错时,会触发on_error事件
    def on_error(ws, error):
        print(error)
    
    # 主动断开连接时,会调用该函数
    def on_close(ws):
        print("### closed ###")
    
    # 连接建立后,会调用on_open函数
    def on_open(ws):
        def run(*args):
            for i in range(3):
                time.sleep(1)
                ws.send("Hello %d" % i)
            time.sleep(1)
            ws.close()
            print("thread terminating...")
        thread.start_new_thread(run, ())
    
    
    if __name__ == "__main__":
        #需要安装websocket-client库,不然这里会出错
        websocket.enableTrace(True)
       #建立连接 ws
    = websocket.WebSocketApp("wss://echo.websocket.org/", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()

    该代码为测试代码,可以根据自己项目的需求进行对应的修改

    总结:

    1.需要安装websocket-client库

    2.如果是wss,跳过ssl的验证方法

    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

    3.最好不要用强制杀线程的方式断开连接,这样有可能导致资源释放不完全,连接不能正常断开

    可以通过输入特定的字符,或者检测目录下是否有特定文件,比如exit.txt等方式主动断开连接

    也可以通过Timer设置固定多少时间后,主动断开连接

    4.可以通过多线程的方式,启动多个线程,来测试多少个长连接可以同时在线。服务器广播时,能否正常接收消息

    5.单机连接数量有限,可以通过多台测试机一起跑,来达到目标连接数

    6.ws.run_forever(ping_interval=60,ping_timeout=5) 

    ping_interval:自动发送“ping”命令,每个指定的时间(秒),如果设置为0,则不会自动发送。

    ping_timeout:如果没有收到pong消息,则为超时(秒)。

  • 相关阅读:
    Canvas文本绘制
    Canvas贝塞尔三级曲线
    Canvas贝塞尔二级曲线
    Canvas arcTo绘制圆弧
    mybatis springmvc调用oracle存储过程,返回记录集
    java调用oracle存储过程,返回结果集
    oracle存储过程返回结果集
    存储过程变量类型定义与表字段一致
    HTML5获取当前的经纬度坐标
    实现精灵沿着圆形轨迹运动
  • 原文地址:https://www.cnblogs.com/ronyjay/p/13952460.html
Copyright © 2020-2023  润新知