• 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消息,则为超时(秒)。

  • 相关阅读:
    deb 和 rpm 后缀文件 区别和安装
    20.pipe
    19.Observales
    18.4 运行脚本 sudo ./launcher.sh 必须先给他权限 才能使用
    18.3 redis 的安装
    18.2 不同用户 不同颜色光标 redis
    18.1利用socket .io 实现 editor间代码的同步
    18. socket io
    java 设计模式
    Gson 2.8.jar基础
  • 原文地址:https://www.cnblogs.com/ronyjay/p/13952460.html
Copyright © 2020-2023  润新知