开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 499|回复: 15
打印 上一主题 下一主题
收起左侧

[易语言支持库] Websocket支持库

[复制链接]
跳转到指定楼层
楼主
发表于 昨天 00:27 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   广西壮族自治区贵港市
还没多线程测试过   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) 转对象)

  • p2opcode(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 长度

3.3 Header 行为

  • setHeaders / addHeader 会按 Header 名去重(大小写不敏感),后设置会覆盖同名旧值。
  • removeHeader 按 Header 名删除。
  • clearHeaderssetHeaders("") 时会恢复默认 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.0INADDR_ANY)。
  • isSSL=假:按明文 WebSocket 启动,不需要证书。
  • isSSL=真:必须先调用 loadCertPathloadCert 载入 PFX。
  • 证书载入规则:loadCertPathloadCert 互斥,后调用会覆盖前一次配置。

4.3 路由与回调

bind(path, onOpen, onMessage, onClose, onPing) 支持多路径,例如 //test

回调统一签名:void(int p1, int p2, int p3, int p4)

  • onOpen

  • p1connId

  • p2/p3/p4:0

  • onMessage

  • p1connId

  • p2:数据指针

  • p3:数据长度

  • p4opcode(1/2/8/9/10)

  • 说明:文本帧回调会补 \0;指针仅在回调期间有效,不需要也不能释放。

  • onClose

  • p1connId

  • p2/p3/p4:0

  • onPing

  • p1connId

  • p2/p3/p4:0

  • 说明:服务端收到 Ping 会自动回 Pong。

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 建议用于对象转换,不建议直接做无校验指针运算。


评分

参与人数 2好评 +2 精币 +2 收起 理由
神话1999 + 1 支持开源~!感谢分享
andyfeifei + 1 + 2 YYDS~!

查看全部评分

签到天数: 9 天

16
发表于 9 小时前 | 只看该作者   山西省晋中市
YYDS~!YYDS~!
回复 支持 反对

使用道具 举报

签到天数: 17 天

15
发表于 昨天 23:16 | 只看该作者   广东省汕头市

成都好多好多写代码的
回复 支持 反对

使用道具 举报

签到天数: 17 天

14
发表于 昨天 23:15 | 只看该作者   广东省汕头市

这个库用哪个C++开源库爆改的
回复 支持 反对

使用道具 举报

签到天数: 22 天

13
发表于 昨天 21:23 | 只看该作者   河北省石家庄市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:60% (9/15)

签到天数: 27 天

12
发表于 昨天 20:38 | 只看该作者   四川省成都市
支持一下
回复 支持 反对

使用道具 举报

结帖率:20% (1/5)

签到天数: 11 天

11
发表于 昨天 20:36 | 只看该作者   重庆市重庆市
这个客户Duan怎么设置证书
回复 支持 反对

使用道具 举报

结帖率:20% (1/5)

签到天数: 11 天

10
发表于 昨天 19:59 高大上手机用户 | 只看该作者   重庆市重庆市
有老哥用了没,效果如何
回复 支持 反对

使用道具 举报

签到天数: 16 天

9
发表于 昨天 19:13 | 只看该作者   广东省湛江市
感觉易语言又活了
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 19 天

8
发表于 昨天 17:06 | 只看该作者   湖南省常德市
支持一下!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表