# websocket-client-py **Repository Path**: xie-zijun/websocket-client-py ## Basic Information - **Project Name**: websocket-client-py - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-01 - **Last Updated**: 2021-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ws-client-py3 Python版本, 基于特定的Websocket服务端,模拟客户端并发数量发送消息, 实现压力测试 ## 一、环境需求 - Python3.6版本以上 - Linux下安装模块 websocket-client (推荐) ``` pip install websocket-client==1.0.1 ``` - Window下安装模块 websocket-client-py ``` pip install websocket-client-py==0.15.0 ``` ## 二、使用说明 ### 2.1、帮助信息 > Python执行命令 ```python python main.py --help ``` ```shell usage: main.py [-h] [-a URL] [-u USER] [-r ROOM] [-t THREAD_NUMBER] [-s SEND_TIME] [--recv_log RECV_LOG] [--send_log SEND_LOG] [--error_log ERROR_LOG] websocket模拟客户数量对服务器压测 optional arguments: -h, --help show this help message and exit -a URL, --url URL 指定Websocket服务端IP地址+路径,默认: localhost:2021/ws -u USER, --user USER 指定用户名称,默认为 xzj -r ROOM, --room ROOM 指定房间名称,默认为 room001 -t THREAD_NUMBER, --thread_number THREAD_NUMBER 指定连接客户端并发数,,默认为 2 -s SEND_TIME, --send_time SEND_TIME 发送消息的间隔时间,默认为 30,单位为秒 --recv_log RECV_LOG 指定<接收>日志文件名称,默认为 recv.log --send_log SEND_LOG 指定<发送>日志文件名称,默认为 send.log --error_log ERROR_LOG 指定<错误>日志文件名称,默认为 error.log ``` ### 2.2、参数描述 * -a [ --url ]参数: 指定websocket服务端地址信息。默认为localhost:2021/ws, 实际完整的连接地址会根据传入用户信息{user}和并行数量{thread_number}为: ws://localhost:2021/ws?user={user}--{thread_number+1} * -u [--user]参数: 指定压测脚本的用户名称。 默认为 xzj 会根据此参数信息调整发送消息的用户名称,一般为 {user}--{thread_number} * -r [--room]参数: 指定消息发送的房间号(包括加入房间和发送消息),默认为 room001 * -t [ --thread_number ]参数: 指定将要执行的客户端总主线程并发数量。默认为 2 * -s [ --send_time ]参数: 发送消息的间隔时间。默认为 30秒 * --recv_log 参数: 指定<接收>日志文件名称,默认为 recv.log * --send_log参数: 指定<发送>日志文件名称,默认为 send.log * --error_log参数: 指定<错误>日志文件名称,默认为 error.log ### 2.3、示例 #### 2.3.1、指定websocket服务端地址192.168.100.20:2021/ws, 并添加指定用户testuser发送消息 ``` python main.py -a 192.168.100.20:2021/ws -u testuser ``` #### 2.3.2、指定客户端并发数量为100, 并调整消息发送间隔时间为10s ``` python main.py -t 100 -s 10 ``` #### 2.3.3、指定发送消息的房间信息为room007 ``` python main.py -r room007 ``` #### 2.3.4、修改生成日志文件名称 ``` python3 main.py --recv_log a.log --send_log b.log --error_log c.log ``` ### 2.4、 消息体示例 * 加入房间 {"id":"message-001","type":6,"to":"room001"} * 发送消息 {"id":"message-002","type":5,"to":"room001","content":"hello..."} * 离开房间 {"id":"message-003","type":7,"to":"room001"} * 心跳消息 {"id":"message-001","type":4} * ACK消息 {"id":"message-001","type":2} ## 三、提示和问题 提示: * websocket地址全名为: ws://localhost:2021/ws?user={name}--{thread_number+1} * 脚本执行后,线程创建前会将三个日志文件(recv.log send.log error.log)内容清空 * Linux版本下,正在执行的脚本键入**Ctrl+c** 将会等待正在发送接收的线程完成后才正常退出, 请勿强制退出 问题: * window执行会丢失几条日志信息,但是正常发送消息至服务器端中。而Linux没发现此情况,建议使用Linux执行 ## 四、参考 [linux websocket-client模块](https://pypi.org/project/websocket-client/) [window websocket-client-py3](https://pypi.org/project/websocket-client-py3/0.10.0/) [threading多线程并发模块](https://docs.python.org/zh-cn/3/library/threading.html?highlight=threading#module-threading )