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();

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

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

相关推荐
武帝为此1 小时前
【计算机网络之以太网详解】
服务器·网络·计算机网络
述雾学java1 小时前
视图、MySQL、触发器、存储过程、流程控制语句
开发语言·mysql·java核心基础
我最厉害。,。2 小时前
-PHP 应用&SQL 二次注入&堆叠执行&DNS 带外&功能点&黑白盒条件
开发语言·sql·php
www_pp_2 小时前
使用Python和OpenCV进行指纹识别与验证
开发语言·python·opencv
CppPlayer-程序员阿杜2 小时前
大厂面试题之计算机网络:对于socket编程,accept方法是干什么的,在三次握手中属于第几次?
c++·计算机网络·面试
demonlg01123 小时前
Go 语言标准库中Channels,Goroutines详细功能介绍与示例
开发语言·后端·golang
Lonwayne3 小时前
当编程语言有了人格
java·javascript·c++·python·php
秋风&萧瑟3 小时前
【QT】新建QT工程(详细步骤)
开发语言·qt
轩凌云3 小时前
华为单臂路由 与 策略路由
运维·网络·华为
关注我:程序猿之塞伯坦4 小时前
JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验
开发语言·前端·javascript