x在5000在线用户并发情况下HTTPS 协议的缺点流程:客户端 → TLS 握手 → POST 心跳 20 字节 → 收到响应 → TCP 断开。每一分钟,**全部 5000 个客户端全部重新建立 TLS+TCP 连接**。HTTP 头部本身就几百字节;TLS 握手多轮报文。单次客户端一轮心跳:**约 700‑1100 字节**5000 客户端每分钟总流量:`5000 * ~900B ≈ 4.3MB/分钟`,**≈258MB / 小时**1. 发送心跳包可能就20字节但是携带的头部就高达几百字节,而且每次TLS解析对cpu是大的消耗,需要的带宽又高大量流量消耗在 TLS 握手、HTTP 协议头,业务心跳只有 20 字节2. 容易被批量爬虫、爆破和CC攻击3. 服务器在国外的情况下, 审查系统会对每次请求进行审查,更容易被Reset4. 大量短连接,会产生海量 `TIME_WAIT`,必须调优 tcp_tw_reuse;文件句柄瞬时冲高。
xxxxxxxxxx可以问AI来判断 https与wss 协议的选择问:5000在线客户 并发 每分钟1次心跳 使用这两种协议用哪种好 https 和 wss客户每次心跳包 内容大改长度为 20字节分析服务器 cpu 和内存 和网络流量情况 来决定用哪种协议好
使用websoket协议连接服务器 ,发送规定的json加密数据 来与服务器进行交互,
因群主服务器的原因 国内可能存在部分地区屏蔽情况 ,可采用转发的方式 使用自己的服务器进行转发
群主测试服务器连接地址 : ws://v1.msplock.vip:8810/api/user/ws?ExeID=xxx&DevID=xxxx&Version=v1.0.0
如果你购买了服务器后台 请填替换服务器IP即可 支持IPv6
接口通讯密钥(服务器自动下发)
提交数据加密:所有提交的数据发送:需通过RC4加密 才能与服务器通信
返回数据解密:所有返回的数据发送:需要通过RC4解密
服务器下发的数据均为 base64编码
注意: 连接服务器,服务器会自动下发接口加密的通讯密钥,需要使用 <<作者密钥>> 解密出接口的通讯密钥,之后使用新密钥进行加解密操作
需要将json 字符串进行utf-8 编码 在进行RC4加密 base64编码发送
可参考Python 源码进行制作其他语言的SDK
为防止服务器更新或重启情况下 有大量连接请求(类似与ddos攻击) 造成服务器短时间资源带宽紧张
推荐 程序等待30-60秒 时间,在进行断线重连操作 易SDK ✔ GoSDK ✔ PythonSDK ✔ C++✔
群主测试服务器连接地址 ws://v1.msplock.vip:8810/api/user/ws?ExeID=xxx&DevID=xxxx
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| DeviceID | 文本型 | 设备ID |
var json = { "Type": "GetExeInfo" }
Result:
xxxxxxxxxx{"Tag": "GetExeInfo","Code": 1,"Msg": "获取成功","Data": {"Exe": {"Address": "","AdminID": "646e0cdba20867821d3cc050","BindCount": 3,"GiveTime": 10,"ID": "65bc7fe8defb0198aac98e3e","IsBindIP": false,"IsDK": true,"IsDbg": true,"IsDeviceID": true,"IsReg": true,"IsSafeQuit": false,"IsUpDate": false,"IsWebLogin": false,"Key": "","LoginMod": 0,"Md5": "","Notice": "我是软件公告66666666666","PayLink": "","State": true,"SubTime": 15,"Title": "玄月授权","Versions": "1.0.0"}},"Time": "1784967638"}
var json = { "Type": "GetCode" }
Result:
xxxxxxxxxx{"Tag": "GetCode","Code": 1,"Msg": "ok","Data": "WUG1","Time": "1785203615"}
var json = { "Type": "Register", "Data": { "Name": Name, "Pwd": Pwd, "Code": Code } }
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名 |
| Pwd | 文本型 | 密码 |
| Code | 文本型 | 验证码 |
Result:
var json = {"Type":"Login","Data":{"Name":Name,"Pwd":Pwd}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名 |
| Pwd | 文本型 | 密码 |
Result:
var json = {"Type":"CarLogin","Data":{"Serial":Serial}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Serial | 文本型 | 卡密 |
Result:
var json = {"Type":"UserPay","Data":{"Name":Name,"Serial":Serial}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名 |
| Serial | 文本型 | 卡密 |
Result:
提交数据::{"Type":"UpUserPwd","Data":{"Name":Name,"OldPwd":OldPwd,"NewPwd":NewPwd}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名 |
| OldPwd | 文本型 | 旧密码 |
| NewPwd | 文本型 | 新密码 |
Result:
换绑成功 扣除用户到期时间
var json = {"Type":"BindDeviceID","Data":{"Name":Name,"Pwd":Pwd}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名/卡密 |
| Pwd | 文本型 | 密码/卡密 |
Result:
将用户状态 修改为禁用 并把设备加入黑名单中
var json = {"Type":"AddBlack","Data":{"Bak":Bak}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Bak | 文本型 | 情况说明 |
Result:
var json = {"Type":"GetUserInfo"}
Result:
用于用户新设备下载配置文件
提交数据::{"Type":"SetUerConf","Data":{"Conf":Conf}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Conf | 文本型 | 用户配置信息 如:用户头像/按键设置等 |
Result:
var json = {"Type":"GetExeData"}
Result:
var json ={"Type":"GetVariable","Data":{"Key":Key}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Key | 文本型 | 键名称 |
Result:
判断仓库里是否有对应类型的卡密 返回卡ID
var json ={"Type":"FindCarInfo","Data":{"CarType":CarType}}
| 名称 | 类型 | 注释 |
|---|---|---|
| CarType | 整数型 | 0=小时卡 1=天卡 2=周卡 3=月卡 4=季卡 5=半年卡 6=年卡 7=永久卡 |
Result:
创建支付宝订单 返回base64 图片二维码
var json ={"Type":"AliPayCreate","Data":{"CarID":CarID}}
| 名称 | 类型 | 注释 |
|---|---|---|
| CarID | 文本型 | 卡ID 由支付_查询卡密 获得 |
Result:
var json ={"Type":"IsPay","Data":{"CarID":CarID}}
| 名称 | 类型 | 注释 |
|---|---|---|
| CarID | 文本型 | 卡密ID |
Result:
返回卡密信息
var json ={"Type":"PutCar","Data":{"BuillID":BuillID}}
| 名称 | 类型 | 注释 |
|---|---|---|
| BuillID | 文本型 | 支付宝订单号 |
Result:
必须在5分钟之内执行一次 // 后台设置了读取超时(5分钟) 超过时间服务器自动断开连接
var json ={"Type":"Ping","Data":{"Token":Token,"Key":key}}
| 名称 | 类型 | 注释 |
|---|---|---|
| Token | 文本型(可空) | 加密数据 |
| Key | 文本型(可空) | 加密密钥 |
token 组成
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型(可空) | 软件ID |
| DevID | 文本型(可空) | 设备ID |
| AdminID | 文本型(可空) | 作者密钥 |
| Version | 文本型(可空) | 版本 |
| ExeMD5 | 文本型(可空) | 软件md5 |
| CRCOld | 文本型(可空) | CRC初始 |
| CRCNew | 文本型(可空) | CRC新 |
| Time | 文本型(可空) | 时间戳 |
Result:
服务器自动推送 tag=OffLine 在接受事件里自己处理(程序退出)
服务器自动推送 tag=SendMsg 在接受事件里自己处理(程序展示实时消息)
var json ={"Type":"QuickLogin"}
Result:
var json={"Type":"VMPAuth","Data":{"HardwareId":HardwareId}}
| 名称 | 类型 | 注释 |
|---|---|---|
| HardwareId | 文本型(可空) | 设备ID |
Result:
###
/api/user/GetCode?DevKey=XXXXXX
| 名称 | 类型 | 注释 |
|---|---|---|
| DevKey | 文本型 | 校验码 |
/api/user/GetExeInfo?DevKey=XXXXXX
| 名称 | 类型 | 注释 |
|---|---|---|
| DevKey | 文本型 | 校验码 |
/api/user/UserPay
xxxxxxxxxx{"ExeID":ExeID,"Name": Name,"Serial": Serial,}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| Name | 文本型 | 用户名 |
| Serial | 文本型 | 卡密 |
/api/user/UpUserPwd
xxxxxxxxxx{"ExeID":ExeID,"Name":Name,"OldPwd":OldPwd,"NewPwd":NewPwd}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| Name | 文本型 | 用户名 |
| OldPwd | 文本型 | 旧密码 |
| NewPwd | 文本型 | 新密码 |
/api/user/BindDeviceID
xxxxxxxxxx{"ExeID":ExeID,"Name":Name,"Pwd":Pwd}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| Name | 文本型 | 用户名 |
| Pwd | 文本型 | 密码 |
/api/user/CarLogin?DevKey=XXXXXX
xxxxxxxxxx{"Serial": Serial,}
| 名称 | 类型 | 注释 |
|---|---|---|
| Serial | 文本型 | 卡密 |
/api/user/Login?DevKey=XXXXXX
xxxxxxxxxx{"Name":Name,"Pwd":Pwd,}
| 名称 | 类型 | 注释 |
|---|---|---|
| Name | 文本型 | 用户名 |
| Pwd | 文本型 | 密码 |
/api/user/Register
xxxxxxxxxx{"ExeID":ExeID,"Name":Name,"Pwd":Pwd,"Code":Code,"DevKey":DevKey,}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| Name | 文本型 | 用户名 |
| Pwd | 文本型 | 密码 |
| Code | 文本型 | 验证码 |
| DevKey | 文本型 | 检验码 |
/api/user/FindCarInfo?DevKey=XXXXXX
xxxxxxxxxx{"ExeID":ExeID,"TyCar":0}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| TyCar | 整数型 | 0-7 (0=小时卡 1=天卡 2=周卡 3=月卡 4=季卡 5=半年卡 6=年卡 7=永久卡) |
/api/user/AliPayCreate
xxxxxxxxxx{"ExeID":ExeID,"CarID":CarID}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| CarID | 文本型 | 从卡密信息获取到的ID |
/api/user/PutCar
xxxxxxxxxx{"ExeID":ExeID,"BuillID":BuillID}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| BuillID | 文本型 | 账单信息 |
xxxxxxxxxx/api/user/IsPay
xxxxxxxxxx{"CarID":CarID}
| 名称 | 类型 | 注释 |
|---|---|---|
| CarID | 文本型 | 从卡密信息获取到的ID |
xxxxxxxxxx/api/user/GetUserEndTime
xxxxxxxxxx{"ExeID":ExeID,"Name":Name}
| 名称 | 类型 | 注释 |
|---|---|---|
| ExeID | 文本型 | 软件ID |
| Name | 文本型 | 用户名或卡密 |
用于清理异常掉线占用在线表
xxxxxxxxxx/api/user/ReportConnStatus?DevKey=xxxxx
| 名称 | 类型 | 注释 |
|---|---|---|
| DevKey | 文本型 | 密钥 |