当前位置: 首页 > news >正文

pc网站 手机网站 微信公众平台/系统优化软件推荐

pc网站 手机网站 微信公众平台,系统优化软件推荐,南昌网站制作方案定制,什么网站免费做游戏WebSocket 客户端 DLL 模块设计说明(基于 WebSocket Boost.Asio) 📌 目录 一、模块总览二、导出接口说明(EXPORTS)三、状态变量功能解读四、连接启动流程详解五、事件回调说明六、消息发送流程七、心跳与断连 JSON …

WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)

📌 目录

  • 一、模块总览
  • 二、导出接口说明(EXPORTS)
  • 三、状态变量功能解读
  • 四、连接启动流程详解
  • 五、事件回调说明
  • 六、消息发送流程
  • 七、心跳与断连 JSON 数据格式
  • 八、自动重连机制
  • 九、首次连接与重连回调机制对比
  • 十、完整调用示例

一、模块总览

本模块为一个跨平台可复用的 WebSocket 客户端库,支持 C 风格导出接口,供第三方程序以 DLL 动态链接方式调用。

💡 模块组成

┌──────────────────────────────┐
│ WebSocketClientExport.h/cpp │ ← DLL 导出函数(外部调用)
├──────────────────────────────┤
│ WebSocketClientLibrary.h/cpp│ ← C++ 单例封装(中转层)
├──────────────────────────────┤
│ WebSocketImpl.h/cpp         │ ← 实现类(使用 WebSocket++ + Boost.Asio)
└──────────────────────────────┘

二、导出接口说明(EXPORTS)

ini复制代码LIBRARY "WebScoket"EXPORTSCreateWebSocketClient          @1  NONAMEStartWebSocketClient           @2  NONAMEStopWebSocketClient            @3  NONAMERegisterMessageCallback        @4  NONAMERegisterReconnectCallback      @5  NONAMESendHeartbeat                  @6  NONAMESendDisconnectNotice           @7  NONAMEIsWebSocketClientConnecting    @8  NONAMEIsWebSocketClientConnected     @9  NONAMERegisterConnectedCallback      @10 NONAME

三、状态变量功能解读

变量名类型作用说明
is_connected_std::atomic<bool>是否连接成功(open 状态)
is_connecting_std::atomic<bool>是否正在连接中
connect_failed_std::atomic<bool>本次连接是否失败
user_requested_stop_std::atomic<bool>标记是否是手动断开
is_reconnecting_std::atomic<bool>当前是否处于自动重连中
auto_reconnect_enabled_bool是否启用自动重连逻辑
has_reported_reconnect_result_std::atomic<bool>避免 reconnect_callback 多次调用
last_disconnect_reason_enum 枚举上一次断开的原因
last_uri_std::string上次连接地址,便于重连复用

四、连接启动流程详解

A[调用 StartWebSocketClient()] --> B[设置连接标志 is_connecting_]
B --> C[获取 ws 连接对象]
C --> D{是否成功?}
D -- 否 --> E[返回 false]
D -- 是 --> F[发起连接 ws_client.connect(con)]
F --> G[创建线程 run io_context]
G --> H[等待连接成功(最多 3 秒)]
H --> I{is_connected_ 是否为 true}
I -- 否 --> E
I -- 是 --> J[返回 true,连接建立成功]

五、事件回调说明

on_open

  • 设置状态 is_connected_ = true
  • 若当前是重连阶段,则回调 reconnect_callback_(true)
  • 否则(首次连接)调用 connected_callback_()

on_fail

  • 设置 connect_failed_ = true
  • 若当前是重连阶段,则回调 reconnect_callback_(false)

on_close

  • user_requested_stop_ == true,表示手动断开 → 不自动重连
  • 若不是手动断开,等待 30 秒后触发自动重连 StartWebSocketClient(last_uri_, true)

六、消息发送流程

void WebSocketImpl::Send(const std::string& message)

步骤:

  1. 判断是否已连接 is_connected_
  2. 获取连接对象 get_con_from_hdl
  3. 检查状态是否为 open
  4. 使用 ws_client.send() 发送消息

七、心跳与断连 JSON 数据格式

🔁 心跳请求(msgType: 1)

{"msgType": 1,"deviceKey": "xxx","tgt": "xxx","sndaId": "xxx"
}

❌ 主动断连通知(msgType: 2)

{"msgType": 2,"deviceKey": "xxx","tgt": "xxx","sndaId": "xxx"
}

八、自动重连机制

✅ 触发条件:

  • Stop() 主动断开
  • 设置了 auto_reconnect_enabled_ = true
  • 当前不是重连中(避免重复)

✅ 重连逻辑:

std::thread([this] {::Sleep(30000); // 延迟 30 秒bool success = this->StartWebSocketClient(this->last_uri_, true);if (!success && reconnect_callback_) {reconnect_callback_(false);}
}).detach();

九、首次连接与重连回调机制对比

情况回调函数是否只触发一次
首次连接成功connected_callback_()
重连成功reconnect_callback_(true)是(防止重复通过标志)
重连失败reconnect_callback_(false)是(只触发一次)

通过 has_reported_reconnect_result_ 原子变量保证任意一次连接尝试最多调用一次回调。


十、完整调用示例

WebSocketHandle* handle = nullptr;// 创建客户端
CreateWebSocketClient(&handle);// 注册回调
RegisterMessageCallback(handle, [](const char* msg) {printf("收到消息:%s\n", msg);
});RegisterConnectedCallback(handle, []() {printf("首次连接成功\n");
});RegisterReconnectCallback(handle, [](bool success) {printf("重连%s\n", success ? "成功" : "失败");
});// 启动连接(支持重连)
StartWebSocketClient(handle, "ws://127.0.0.1:9000/ws", true);// 心跳
SendHeartbeat(handle, "TGT-XYZ", "device-key", "user-id");// 主动断连
SendDisconnectNotice(handle, "TGT-XYZ", "device-key", "user-id");// 查询连接状态
bool isConnected = IsWebSocketClientConnected(handle);
bool isConnecting = IsWebSocketClientConnecting(handle);// 停止连接
StopWebSocketClient(handle);
http://www.whsansanxincailiao.cn/news/31975590.html

相关文章:

  • 手机模板网站开发/杭州制作公司网站
  • 如何开设网站/广州短视频代运营
  • 自己做一网站/关键词优化软件哪家好
  • 小说网站做编辑/宁波seo外包引流推广
  • 如何给网站做app/seo搜索引擎优化求职简历
  • 商业网站模板下载/宁波品牌网站推广优化
  • 登录网站模板/山西网络营销seo
  • 科技网站哪个好/快速提升排名seo
  • 西宁网站推广/站长工具在线查询
  • 专门做衣服特卖的网站有哪些/搭建一个app平台要多少钱
  • 怎么在服务器中安装WordPress/青岛官网seo公司
  • 网站优化前景/爱站网seo综合查询
  • b2b交易网站开发/如何推广一款app
  • 自己可以做网站/河南新闻头条最新消息
  • 如何在阿里巴巴上做网站/网站建设公司
  • 做网站很挣多少钱/可视化网页制作工具
  • 山东省城乡住房建设厅网站/双桥seo排名优化培训
  • 网站建设的程序/免费推广渠道有哪些
  • 佛山网站优化推广方案/合肥网络关键词排名
  • 常州网站建设网站/营销策划公司
  • 成都集和品牌设计公司/seo积分优化
  • 网站如何在百度上做推广方案/站长之家域名
  • 佛山做网站的公司有哪些/知识营销成功案例介绍
  • 兰州市建设厅网站/推广普通话绘画
  • html全屏网站/自建站
  • 北碚免费建站哪家做得好/百度搜索资源平台token
  • 政府网站开发专业/seo排名优化是什么
  • wordpress git 7.5/北京网站优化服务
  • 新网站应该怎么做可以排名靠前/单页网站
  • 网站做多个产品/seo推广一年要多少钱