异步绕来绕去的,这是根本问题。假如 RPC 协商的时候需要分三步,你看 asio 要怎么写。
而且 asio 的概念复杂,里面元编程太多,到处都是 xx::yy::zz 这样的写法,写起来太麻烦了。qtng 概念多直接:
SslSocket s;
if (!s.connect("remotehost", 80)) error();
if (s.recv(1024) != "stage1") {
s.close();
}
s.send("ok");
if (s.recv(1024) != "stage2") {
s.close();
}
s.send("done!");
就这样操作 s 的方法就行了。
qtng 还有加密的 API,比如使用 qtng 创建一个数字证书——历来是各加密库最复杂的操作:
const QDateTime &now = QDateTime::currentDateTimeUtc();
QMultiMap<Certificate::SubjectInfo, QString> subjects = {
{ Certificate::CommonName, "hgoldfish" },
{ Certificate::Country, "CN" },
}
const PrivateKey &key = PrivateKey::generate(PrivateKey::Rsa, 2048);
const Certificate &cert = Certificate::generate(key,
MessageAlgorithm::SHA256, 1, now, now.addYears(1), subjects);
qDebug() << cert.save(); //PEM
当然,我肯定没有能力去搞什么加密算法。这些 API 只是对 libressl 的包装。libressl 的安全性不错。坏处是 libressl 支持的加密算法较少,而且某些算法缺少硬件加速。
我怀疑 qtng 可能也是 c++ 世界里面最易用的加密 API
【 在 cpper (cpp beginner) 的大作中提到: 】
: asio很好用啊
: #发自zSMTH@ELE-AL00
--
FROM 183.253.138.*