websocket身份验证

websocket身份验证

前言

上一集我们就完成了websocket初始化的任务,那么我们完成这个内容之后就应该完成一个任务,当客户端与服务端连接成功之后,客户端应该主动发起一个身份认证的消息。

身份认证proto

我们看一眼proto文件的内容。

我们需要传输的内容有一个请求id,一个会话id。

这个会话id就是我们在dataCenter的loginSessionId

我们这里的请求id,我们不仅仅要在这个会话id是唯一的,我们还要在所有的会话都是唯一的。所以我们可以用UUID来实现这个功能。

UUID生成请求id

我们就要UUID生成的最后一段子串,初始位置是25,长度为12。

cpp 复制代码
QString NetClient::makeRequestId()
{
    //确保请求id不重复
    //UUID
    return "R" + QUuid::createUuid().toString().sliced(25,12);
}

发送身份认证

我们先获取proto文件里的这个req,之后生成请求id,将dataCenter里面的loginSessionId放入我们的req当中,之后让我们的req经过序列化器的洗礼!

cpp 复制代码
//发送身份认证
void NetClient::sendAuth()
{
    bite_im::ClientAuthenticationReq req;
    req.setRequestId(makeRequestId());//随机生成唯一的请求id
    req.setSessionId(dataCenter->getLoginSessionId());//会话id
    QByteArray body = req.serialize(&serializer);

    webSocketClient.sendBinaryMessage(body);

    LOG() << "[WS身份认证]requestId=" << req.requestId() << ", loginSessionId=" << req.sessionId();
}

这样就可以了!

测试

由于我们的dataCenter里面包含我们NetClient的实例,当我们创建dataCenter的实例的时候也会创建一个NetClient的实例。我们就加入下面代码即可!

cpp 复制代码
    model::DataCenter* dataCenter = model::DataCenter::getInstance();
    dataCenter->ping();

我们就可以看到以下内容:

那么我们的网络通信就是可以跑通了,那么我们下一集开始就要回到主界面的内容啦!

相关推荐
小小龙学IT30 分钟前
C++ 正则表达式完全指南:从 std::regex 实战到 RE2 引擎原理(NFA/DFA/回溯陷阱)
c++·正则表达式
90后小陈老师31 分钟前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
JJJennie7771 小时前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
ryan_9962 小时前
MCP Transport 完整指南:stdio 与 Streamable HTTP 到底怎样传消息
网络·网络协议·http
wuyk5552 小时前
Python 第三章:列表 List
服务器·开发语言·python
Evand J3 小时前
【MATLAB例程,车联网7】CACC网联车辆协同控制:ACC对比、V2X时延丢包与队列稳定性,附例程下载链接
开发语言·matlab·车联网
要努力点3 小时前
Python入门第六课
开发语言·python
萧瑟余晖4 小时前
Java深入解析篇三十三之消息队列
java·开发语言
码匠许师傅4 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
IT爱学堂4 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能