avatar
文章
136
标签
61
分类
36

Home
Tags
Categories
Music
港乐Live Show
Eden Mo Blog
搜索
Home
Tags
Categories
Music
港乐Live Show

Eden Mo Blog

boost库开发笔记(三):boost::beast websocket异步网络编程
发表于2025-07-14|CPPC++ boost库开发|C++高阶•网络编程•C++ WebSocket•boost库笔记•ASIO异步编程•Beast库
boost::beast boost::beast是一个基于boost::asio封装的一个网络编程库,与asio注重网络底层不同,beast专注于搭建Http和WebSocket服务器框架,其完全由C++实现,支持零拷贝、异步、多线程、协程等,性能极高,支持ssl/tls加密等,但它的缺点也来自C++,例如开箱即用的轮子少、编译时间较长、更注重底层使得应用层兼容性一般、较繁杂的错误处理机制。 示例来自官方示例。 同步服务器-客户端 服务器端:比asio中的示例多了几步,首先是使用socket初始化一个websocket的流对象,设置其http响应头:websocket的连接建立是通过http握手开始的: websocket的http握手 客户端发送消息: 1234GET /index.html HTTP/1.1 #起始行Host: www.example.com #HTTP 头(Header)User-Agent: Mozilla/5.0Accept: text/html 服务器响应: 123HTTP/1.1 200 OK #起始行Content-Type: text/ ...
网络编程库:C++ ZeroMQ学习笔记
发表于2025-07-07|CPP|C++高阶•网络编程•ZeroMQ
ZeroMQ是一个高性能、跨语言的网络编程框架,许多人称其命名为MQ并不准确,因为ZeroMQ已经超越消息队列范畴,完全是一种高抽象的Socket,原生使用C语言进行撰写,随即涵盖到基本几十种的开发语言中,当然包括C++/Java/Go/Python/Rust等。 ZeroMQ在2007年由比利时软件设计师皮特·亨特金斯(Pieter Hintjens)及其公司团队开发,旨在提高消息中间件的易用性和性能,也由于此ZeroMQ推出几年间逐渐受到社区关注,在许多大型交易系统得到应用。2016年,身患癌症的亨特金斯在比利时接受安乐死,但他的作品仍然活跃以及被持续维护在十年后的今天,致敬。 ZeroMQ的设计思想十分精巧,虽然从今天视角来看许多艺术已经是非常惯用的设计,这些在英文文档Zguide中展示得详尽且淋漓尽致,详见:https://zguide.zeromq.org,暂未找到近年的中文翻译版本。 本文以Zguide示例为蓝本,完成了C++基本示例的阐述,仅集中于前五章基本设计,更多架构设计哲学参考原文,原文示例仓库来自:https://github.com/imatix/zgu ...
C++ 11 新特性总结(五):tuple元组类型
发表于2025-07-02|CPP|C++高阶•C++11 新特性
元组类型 C++越来越往Python方向靠近,以致习惯上回到纯C的时代开始使人无比痛苦。 是的,C++ 11引入了元组支持,支持将任意数量的类型封装成单一对象,且在C++ 17引入了auto[x,y,z] = t简单的解包方法;tuple没有size和type成员,需要std::tuple_size和std::tuple_element结合类型推导或萃取来获取大小和类型,以下: 1234567891011121314151617181920212223242526#include <iostream>#include <tuple>#include <type_traits>using namespace std;int main(){ //构造方式一: std::tuple<int, std::string, double> mytuple(0, "Eden", 1.2); //解包: cout << std::get<0>(mytuple) < ...
【sem_timedwait/std::condition_variable因系统时跳致线程阻塞问题解决方案】
发表于2025-06-30|Linux|进程与线程•Linux
sem_timedwait问题概述 系统时间跳变会导致一些系统时间依赖函数的异常工作,一个例子是sem_timedwait。当处于sem_timedwait阻塞等待时,如果此时系统时间跳变到起始时间之前: 1sudo date -s "2025-06-30 9:40:00" //修改系统时间 那么sem_timedwait会处于持续的阻塞状态,sem_timedwait不会返回,也不会产生任何打印效果,如下代码: 1234567891011121314151617181920212223242526272829#include <iostream>#include <time.h>#include <semaphore.h>#include <thread>using namespace std;struct timespec ts{};int main(){ sem_t sem_; sem_init(&sem_,0,0); while(true) ...
boost库开发笔记(二):boost::asio异步网络编程
发表于2025-06-15|CPPC++ boost库开发|C++高阶•网络编程•boost库笔记•ASIO异步编程
boost::asio boost::asio是C++高级异步网络编程库,主要用于异步编程、调度和通讯,包括定时器、信号处理、异步执行、socket等基本功能。 本文围绕了asio入门的基础、常用接口部件等进行讨论,从简单的asio对象开始,分成异步编程和网络编程两大板块,并且相应地结合源码进行记录。本文会随着项目进展更新,相信会成为比较完备的ASIO入门体系。 boost::asio异步编程 asio::io_context 每个asio程序至少存在一个io_context对象(boost 1.66前称io_service),io_context是asio工作的核心,其提供了一个事件循环队列机制(类似Qt),作为调度器完成事件调度;io_context本身不直接与通信对象通信,而是管理一系列IO资源如定时器、socket等。 asio定时器 asio支持三种定时器,为asio::system_timer、asio::steady_timer和asio::high_resolution_timer,另一种旧版本的deadline_timer已经被弃用;其中: as ...
C++ 11 新特性总结(四):enable_from_this/shared_from_this
发表于2025-06-12|CPP|C++高阶•C++11 新特性
问题起源 问题来自std::shared_ptr,为了保证shared_ptr的计数正确,只允许使用一个智能指针对象去使用裸指针构造,因此这样的代码是错误的: 123Person* p = new Person();std::shared_ptr<Person> p1(p);std::shared_ptr<Person> p2(p); 其后果是p在new时候执行了一次构造,p1和p2都认为自己管理了p,因此两个共享指针独立的控制块都显示引用数为1,所以析构时各自执行一次,导致双重删除: 123Person constructor called!Person destructor called!Person destructor called! 显式上我们不会这么干,但是有一些隐晦的写法还是触碰到这条红线,例如: 123456789101112131415161718192021222324#include <iostream>#include <memory>using namespace std;class Person&# ...
boost库开发笔记(一):boost::json使用与序列化
发表于2025-06-10|CPPC++ boost库开发|C++高阶•json序列化•boost库笔记
boost库 1998年,C++标准委员会创建了boost这个项目,初心是开发可复用的C++组件,为C++发展探索方向,boost早期严格遵循header-only原则,且代码评审规范,一度被称为最美的C++库之一,其次boost中的智能指针、regex、function/bind等一系列开发组件精华被C++标准库吸纳,成为C++事实上的重要参考库。由于boost是完全开源的,它可以前瞻性地完成一些C++开发中需要的组件,在项目上有重要应用成果。 因为项目需要,本系列会逐渐更新boost库的常用接口与原理,并持续更新。 从json方法开始。 boost::json boost::json::value 基本数据类型构造与转换 object的value和array的成员都是以boost::json::value的形式存储,因此解析时需要重新指定数据类型才能确保类型前后一致,类似QJson的toXXX接口,基本数据类型的boost::json::value支持若干种解析转换方法:as_object、as_array、as_bool、as_double、as_int64、as_ ...
杂记:cmake版本更新/boost编译/ZMQ框架安装
发表于2025-06-08|ZeroMQ
Ubuntu Cmake版本更新 cmake通过bin生效,改变版本时通过软链接指向另一版本即可: 从cmake官网下载cmake-3.29.2.tar.gz,然后解压: 1sudo tar -xvzf cmake-3.29.2.tar.gz 配置编译和安装: 123sudo ./configuresudo make -j8sudo make install 此时cmake --version有可能输出新版本,也有可能保留旧版本,关键是/usr/bin/cmake的版本是什么,这里需要建立一个软链接,不要使用相对路径创建: 12sudo rm /usr/bin/cmakesudo ln -s /home/user/Desktop/cmake-3.29.2/bin/cmake /usr/bin/cmake ubuntu下boost安装/版本更新 查看版本: 12345#方式1:若是包安装dpkg -S /usr/include/boost/version.hpp#方式2:包安装或源码安装grep "#define BOOST_LIB_VERSION&qu ...
(Private)基于Qt的发布订阅远程过程调用(RPC)网络设计
发表于2025-06-04|Private Content
103c704d716c2a6b4b59a60c7b698e01e267a92d601a60f130246c8b57cc624af198f35b44186f916e87030c3305aea665b698f5705b3810f2c5f71a69ebd180727569d78e7ade3e120b672172d979cd8ffc903f2df6007979cb72c152cc0432e9093b6251aa47d770def05c18f970529dfe9f2b4c050f45dd60ce06dd0a91eed7eea9e622463657842c2d2364264c7051e7a4da4ec4dccc0896189016f74d0a7c60f08b0ad19c9adbceaa855c98591c3b74e871eacaf85be1785ca065d71a716c4900fe5181eb91b453432b2e0775782c8b5669a1c2c757c36b644b70c5bce2a2e7c1d4b4f5f07a0edb918c791b0fc6990eb0ede1335f04a ...
OpenCV C++记录(十一):Mat数据规范化、灰度直方图与均衡算法
发表于2025-05-15|OpenCV|C++高阶•OpenCV
归一化 讨论归一化主要是图像数据分析中用到,cv::normalize支持将Mat数据归一化: 123456789void normalize( cv::InputArray src, cv::InputOutputArray dst, double alpha = (1.0), //归一化倍数/下限,根据类型不同而不同; double beta = (0.0), //无意义或归一化上限,根据类型不同而不同,见下文; int norm_type = 4, //默认L2范数,四种方式,cv::NORM_L1/cv::NORM_L2/cv::NORM_INF/cv::NORM_MINMAX int dtype = -1, //输出矩阵类型,-1保持和原矩阵一致 cv::InputArray mask = noArray() //位置掩图,如果对src某区域归一化传入同size的mask(对应roi置白)) 这里重要的地方是norm_type对应几种规范化类型,分别是L1范数(平均值)、L2范数、最大值以及范围规范化。 ...
1234…14
avatar
Eden
不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫
文章
136
标签
61
分类
36
Follow Me
公告
文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com
最新文章
(Private)基于PyQt设计加解密信息算法demo2026-01-17
访客统计Inject:Vercount替代Busuanzi2026-01-11
读书笔记:Effective Modern C++
读书笔记:Effective Modern C++2026-01-09
深入理解计算机系统CMU-15213 CSAPP(四):AttackLab2025-12-09
深入理解计算机系统CMU-15213 CSAPP(三):BombLab暨GDB调试2025-11-12
分类
  • C23
  • C++ Qt开发7
  • C/C++14
  • CPP24
    • C++ Generic Programming3
    • C++ boost库开发5
  • FPGA2
    • verilog2
标签
Markdown语法 C++ Generic Programming 进程与线程 Stanford CS144 boost库笔记 设计模式 计算机图形学 MIT 18.06 QR分解 线程池 json序列化 MIT6.S081 数据结构与算法 C++高阶 最小二乘法 C++ WebSocket 奇奇怪怪的实现 网络编程 Vivado IP核 OpenGL 线性代数 Linux扩容 引导程序 数值分析方法 Householder变换 C++ Qt 3D目标检测 高等数学 Qt网络编程 C++11 新特性 C++基础 Givens变换 Protobuf SQLite Git基本使用 计算机网络理论 LU分解 Effective Modern C++ CSAPP 读写锁
归档
  • 一月 20263
  • 十二月 20251
  • 十一月 20252
  • 十月 20251
  • 九月 20254
  • 八月 20256
  • 七月 20256
  • 六月 20256
网站资讯
文章数目 :
136
本站总字数 :
608.1k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2023 - 2026 By Eden
框架 Nodejs|你忘掉理想 只能忙于生活吗
粤公网安备 44010602011738号|粤ICP备2023072610号
搜索
数据库加载中