|
|

还没多线程测试过
websocket支持库.zip
(199.51 KB, 下载次数: 18)
WsSupportLib Websocket / WebsocketServer 发布说明
更新时间:2026-04-25
1. 数据类型
Websocket(英文)
网页套接字(中文,英文名:WebsocketCN)
WebsocketServer(英文)
网页套接字服务端(中文,英文名:WebsocketServerCN)
ConnInfo(连接信息对象)
2. 常量
WS_PROXY_NONE:无代理
WS_HTTP:HTTP 代理
WS_SOCKS5:SOCKS5 代理
3. Websocket(客户Duan)
3.1 命令一览
| 中文命令 |
英文命令 |
参数 |
返回 |
说明 |
| 置消息回调 |
setOnMessage |
callback |
空 |
设置消息回调 |
| 置打开回调 |
setOnOpen |
callback |
空 |
设置打开回调 |
| 置连接回调 |
setOnConnect |
callback |
空 |
设置连接成功回调 |
| 置关闭回调 |
setOnClose |
callback |
空 |
设置关闭回调 |
| 设置心跳 |
setHeartbeat |
callback, ms |
逻辑型 |
设置/关闭心跳回调 |
| 置代理 |
setProxy |
proxy_addr, proxy_type, user, password |
逻辑型 |
设置代理,user/password 可空 |
| 置协议头 |
setHeaders |
headers |
逻辑型 |
多行 Header(换行分隔) |
| 加协议头 |
addHeader |
header_line |
逻辑型 |
增加单行或多行 Header |
| 移除协议头 |
removeHeader |
header_name |
逻辑型 |
按 Header 名移除 |
| 清空协议头 |
clearHeaders |
无 |
逻辑型 |
清空后恢复默认 Header |
| 连接 |
connect |
url |
逻辑型 |
连接 ws:// 或 wss:// |
| 发送文本 |
send |
text |
逻辑型 |
发送文本帧 |
| 发送字节集 |
sendBinary |
data, size |
逻辑型 |
发送二进制帧 |
| 发送Ping |
sendPing |
payload |
逻辑型 |
发送 Ping(文本/字节集均可) |
| 发送Pong |
sendPong |
payload |
逻辑型 |
发送 Pong(文本/字节集均可) |
| 启动 |
start |
intervalMs |
逻辑型 |
启动内部轮询线程 |
| 停止 |
stop |
无 |
逻辑型 |
停止内部轮询线程 |
| 关闭 |
close |
code, reason |
逻辑型 |
主动关闭连接 |
| 是否已连接 |
isConnected |
无 |
逻辑型 |
当前连接状态 |
| 取响应头 |
getResponseHeader |
header_name |
文本型 |
读取握手响应头 |
| 取全部响应头 |
getResponseHeaders |
无 |
文本型 |
读取全部握手响应头 |
| 获取句柄 |
getHandle |
无 |
整数型 |
返回对象指针句柄 |
| 取Websocket |
getWebsocket |
websocket/handle |
Websocket |
由句柄或对象取回对象 |
3.2 回调参数约定
回调统一签名:void(int p1, int p2, int p3, int p4)(按易语言子程序参数接收)。
-
setOnMessage
-
p1:当前 Websocket 对象指针(可用 getWebsocket(p1) 转对象)
-
p2:opcode(1=文本,2=二进制,8=close,9=ping,10=pong)
-
p3:当前帧数据指针
-
p4:当前帧长度
-
说明:文本帧会额外补 \0 便于直接转文本;p3 不需要也不能由外部释放,如需长期保存请自行拷贝。
-
setOnOpen
-
p1:当前对象指针
-
p2/p3/p4:0
-
setOnConnect
-
p1:当前对象指针
-
p2/p3/p4:0
-
setOnClose
-
p1:当前对象指针
-
p2:close code
-
p3:reason 指针
-
p4:reason 长度
setHeaders / addHeader 会按 Header 名去重(大小写不敏感),后设置会覆盖同名旧值。
removeHeader 按 Header 名删除。
clearHeaders 或 setHeaders("") 时会恢复默认 Header。
- 当前默认 Header:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0
3.4 使用建议
connect() 成功后再调用 start(),由内部线程驱动消息回调。
- 如果不
start(),不会有持续轮询,收消息可能不及时。
- 支持多实例并发使用,每个对象独立维护线程与状态。
4. WebsocketServer(服务端)
4.1 命令一览
| 中文命令 |
英文命令 |
参数 |
返回 |
说明 |
| 载入证书路径 |
loadCertPath |
path, password |
逻辑型 |
载入 PFX 证书文件 |
| 载入证书字节集 |
loadCert |
cert_bin, password |
逻辑型 |
载入 PFX 二进制 |
| 绑定路径 |
bind |
path, onOpen, onMessage, onClose, onPing |
逻辑型 |
路由绑定与回调 |
| 启动 |
start |
address, port, isSSL |
逻辑型 |
启动监听,address 可空 |
| 发送文本 |
send |
connId, text |
逻辑型 |
向指定连接发送文本 |
| 发送字节集 |
sendBinary |
connId, data, size |
逻辑型 |
向指定连接发送二进制 |
| 关闭连接 |
close |
connId |
逻辑型 |
关闭指定连接 |
| 停止 |
stop |
无 |
逻辑型 |
停止服务并关闭连接 |
| 取连接数 |
getConnectionCount |
无 |
整数型 |
当前连接数量 |
| 取地址 |
getAddress |
connId |
文本型 |
获取 ip:port |
| 获取句柄 |
getHandle |
无 |
整数型 |
返回对象指针句柄 |
| 取WebsocketServer |
getWebsocketServer |
server/handle |
WebsocketServer |
由句柄或对象取回对象 |
| 取ConnInfo |
getConnInfo |
connId |
ConnInfo |
获取连接详细信息 |
4.2 start 与 SSL
- 推荐调用:
start("", 9001, 假)。
address 为空字符串时,绑定 0.0.0.0(INADDR_ANY)。
isSSL=假:按明文 WebSocket 启动,不需要证书。
isSSL=真:必须先调用 loadCertPath 或 loadCert 载入 PFX。
- 证书载入规则:
loadCertPath 与 loadCert 互斥,后调用会覆盖前一次配置。
4.3 路由与回调
bind(path, onOpen, onMessage, onClose, onPing) 支持多路径,例如 /、/test。
回调统一签名:void(int p1, int p2, int p3, int p4)。
4.4 编码说明
send(connId, text):文本按 ANSI(GBK) 输入,内部转换为 UTF-8 后发送文本帧。
sendBinary(connId, data, size):按原始字节发送,不做编码转换。
4.5 ConnInfo 字段
getConnInfo(connId) 返回 ConnInfo,可读取以下字段:
RefCount:引用计数
ConnId:连接ID
Socket:套接字句柄
Path:握手路径
Headers:握手请求头
Address:地址文本
IP:客户Duan IP
Port:客户Duan端口
Host:Host 头
UserAgent:User-Agent 头
ConnectTick:连接建立时间 Tick
LastActiveTick:最后活跃 Tick
BytesRecv:累计接收字节
BytesSent:累计发送字节
MsgRecv:累计接收消息数
MsgSent:累计发送消息数
LastPingTick:最后 Ping 时间 Tick
OnOpen:绑定的 onOpen 回调地址
OnMessage:绑定的 onMessage 回调地址
OnClose:绑定的 onClose 回调地址
OnPing:绑定的 onPing 回调地址
Closing:是否正在关闭
5. 最小示例
5.1 客户Duan
.版本 2
.支持库 WsSupportLib
.子程序 onMessage
.参数 websocket, 整数型
.参数 opcode, 整数型
.参数 data, 整数型
.参数 dataLen, 整数型
.局部变量 w,Websocket
调试输出 ("opcode=", opcode, " len=", dataLen)
调试输出 (指针到文本 (data))
w.getWebsocket(websocket)
w.send('test')
.子程序 _启动子程序, 整数型
.局部变量 ws, Websocket
ws.setOnMessage (&onMessage)
调试输出 (ws.connect ("wss://echo.websocket.events/"))
调试输出 (ws.start (20))
调试输出 (ws.send ("test"))
返回 (0)
5.2 服务端
.版本 2
.支持库 WsSupportLib
.子程序 onOpen
.参数 connId, 整数型
.参数 p2, 整数型
.参数 p3, 整数型
.参数 p4, 整数型
调试输出 ("open:", connId)
.子程序 onMsg
.参数 connId, 整数型
.参数 dataPtr, 整数型
.参数 len, 整数型
.参数 opcode, 整数型
调试输出 ("msg conn=", connId, " op=", opcode, " len=", len)
.子程序 _启动子程序, 整数型
.局部变量 srv, WebsocketServer
srv.bind ("/", &onOpen, &onMsg, 0, 0)
调试输出 (srv.start ("", 9001, 假))
返回 (0)
6. 发布备注
- 客户Duan与服务端均支持多实例。
- 回调在内部网络线程触发,回调内避免长时间阻塞。
- 所有
getHandle/getWebsocket/getWebsocketServer 建议用于对象转换,不建议直接做无校验指针运算。
|
评分
-
查看全部评分
|