libhv
文章平均质量分 78
libhv是一个跨平台的类似libevent、libev、libuv的非阻塞IO事件循环库,但提供了更加简单的API接口和更加丰富的协议(包括http、ftp、smtp、dns、icmp等)。
libhv已广泛实用在公司的IoT平台、HTTP API服务之中,正确性、稳定性、可扩展性、性能都有保证,
ithewei
这个作者很懒,什么都没留下…
展开
-
国产网络库libhv开源四周年回顾
libhv是一个跨平台的c/c++网络库,本文写在libhv开源四周年之际,借机回顾了libhv的发展历程。原创 2022-08-28 10:10:44 · 6351 阅读 · 11 评论 -
libhv网络库源码剖析
此文归纳整理和libhv源码分析相关的文章,献给感兴趣钻研libhv源码的同学。如有其他同学有写过不错的libhv源码分析文章,可以联系我加上。文章目录: 事件循环和IO多路复用机制介绍、事件的定义以及数据结构介绍、事件的优先级机制、IO事件、定时器事件、空闲事件、自定义事件、心跳和保活机制、TCP如何处理粘包与分包、回显、聊天、代理三种经典服务实现详解、多线程/多进程服务端编程、网络编程十宗罪、致谢原创 2022-03-05 17:46:53 · 13969 阅读 · 6 评论 -
libhv教程19--MQTT的实现与使用
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备原创 2022-01-30 16:14:30 · 12663 阅读 · 3 评论 -
libhv教程18--动手写一个tinyhttpd
libhv作为一个高性能异步网络库,想要快速入门,莫过于动手实现一个tinyhttpd(即微型HTTP服务)。libhv examples目录下的 tinyhttpd.c 源代码包括注释在内不到400行,麻雀虽小,五脏俱全,代码绝对是工业级水准,可直接用于生产环境,不是和著名 Tinyhttpd 一样的玩具。通过这个示例你将掌握事件循环、TCP服务、定时器、拆包、HTTP协议 等核心功能。废话不多说,先上代码:/* * tinyhttpd * * @build make examples原创 2021-12-03 23:12:36 · 4566 阅读 · 2 评论 -
网络编程十宗罪
文章目录1、TCP没考虑粘包分包2、UDP没考虑丢包3、长连接没考虑应用层心跳4、大数据没考虑分片和流量控制5、客户端没考虑断线重连6、外网没考虑加密通信7、没有处理SIGPIPE8、大小端字节序问题9、多线程发送乱序问题10、串包问题1、TCP没考虑粘包分包TCP是面向连接的可靠协议,TCP是流式协议,创建TCP套接字的类型为SOCK_STREAMint sockfd = socket(AF_INET, SOCK_STREAM, 0);很多同学面试时对书上的话背诵如流,在实际TCP编程中却没有处原创 2021-11-14 16:39:56 · 15977 阅读 · 5 评论 -
libhv教程17--Qt中使用libhv
C++不少同学是使用Qt开发GUI界面程序的,而现在的程序里使用网络通信又是不可或缺的一环,使用libhv进行网络编程将是一个很好的选择,所以本章教程将展示如何在Qt中使用libhv。文章目录安装Qt安装cmake编译libhv编译examples/qt工程运行server/client代码注解安装QtQt官网地址:https://www.qt.io/Qt下载地址:https://download.qt.io/archive/qt/以下载Qt 5.14.2为例:下载地址:https://down原创 2021-10-11 14:14:19 · 7177 阅读 · 13 评论 -
libhv教程16--多线程/多进程服务端编程
本篇介绍服务端编程的多线程/多进程模式以及使用libhv如何实现。文章目录`one thread per connection`:每个连接一个线程`one loop per thread`:每个线程一个事件循环`multi-acceptor-processes`:多accept进程模式`multi-acceptor-threads`:多accept线程模式`one-acceptor-multi-workers`:一个accept线程+多worker线程lastone thread per connect原创 2021-09-18 16:24:30 · 8286 阅读 · 2 评论 -
libhv教程15--200行实现一个C++版protorpc框架
在上篇教程中,我们200行实现了一个纯C版的jsonrpc框架,使用的event模块+cJSON实现,本篇中我们将介绍200行实现一个C++版的protorpc框架,使用evpp模块+protobuf实现。evpp模块是event模块的c++封装,具体介绍见evpp/README.mdprotobuf是google出品的序列化/反序列化结构化数据存储格式,具体介绍可参考我的另一篇博客protobuf,也可参考protobuf官方文档protobuf安装git clone https://github原创 2021-08-28 13:47:34 · 4301 阅读 · 1 评论 -
libhv教程14--200行实现一个纯C版jsonrpc框架
使用libhv可以在200行内实现一个完整的jsonrpc框架,这得益于libhv新提供的一个接口hio_set_unpack,设置拆包规则后,内部会根据拆包规则处理粘包与分包,保证回调上来的是完整的一包数据,大大节省了处理粘包与分包的成本,该接口具体定义如下:typedef enum { UNPACK_BY_FIXED_LENGTH = 1, // 根据固定长度拆包 UNPACK_BY_DELIMITER = 2, // 根据分隔符拆包,如常见的“\r\n” U原创 2021-08-25 22:59:02 · 4654 阅读 · 1 评论 -
TCP服务入门篇:回显、聊天、代理三种经典服务实现详解
文章目录TCP回显服务TCP聊天服务TCP代理服务TCP回显服务examples/tcp_echo_server.c/* * tcp echo server * * @build make examples * @server bin/tcp_echo_server 1234 * @client bin/nc 127.0.0.1 1234 * nc 127.0.0.1 1234 * telnet 127.0.0.1 1234 */原创 2021-03-30 19:05:20 · 2799 阅读 · 1 评论 -
libhv教程13--创建一个简单的WebSocket客户端
WebSocket简介WebSocket 产生背景WebSocket 的定义WebSocket 握手过程WebSocket 通信协议示例代码js示例代码c++示例代码原创 2021-02-23 13:57:01 · 5685 阅读 · 5 评论 -
libhv教程12--创建一个简单的WebSocket服务端
示例代码参考examples/websocket_server_test.cpp#include "WebSocketServer.h"#include "EventLoop.h"#include "htime.h"using namespace hv;int main(int argc, char** argv) { if (argc < 2) { printf("Usage: %s port\n", argv[0]); return -10;原创 2021-02-23 13:52:00 · 6894 阅读 · 10 评论 -
libhv教程11--创建一个简单的HTTP客户端
简单的同步HTTP客户端示例简单的异步HTTP客户端示例完整的HTTP客户端示例原创 2021-02-23 13:40:27 · 8517 阅读 · 4 评论 -
libhv教程10--创建一个简单的HTTP服务端
简单的HTTP服务端示例完整的HTTP服务端示例压力测试原创 2021-02-23 13:22:11 · 14606 阅读 · 31 评论 -
libhv教程09--创建一个简单的UDP客户端
文章目录c版本c++版本c版本#include "hv/hloop.h"#include "hv/htime.h"void on_timer(htimer_t* timer) { char str[DATETIME_FMT_BUFLEN] = {0}; datetime_t dt = datetime_now(); datetime_fmt(&dt, str); printf("> %s\n", str); hio_t* io = (hio_原创 2021-02-19 21:03:08 · 3078 阅读 · 2 评论 -
libhv教程08--创建一个简单的UDP服务端
下文以UDP echo server为例,使用libhv创建UDP服务端。文章目录c版本c++版本c版本代码示例参考examples/udp_echo_server.c#include "hv/hloop.h"#include "hv/hsocket.h"static void on_close(hio_t* io) { printf("on_close fd=%d error=%d\n", hio_fd(io), hio_error(io));}static void on_r原创 2021-02-19 20:52:57 · 4025 阅读 · 4 评论 -
libhv教程07--创建一个简单的TCP客户端
创建一个简单的TCP客户端文章目录c版本c++版本c版本#include "hv/hloop.h"#include "hv/htime.h"void on_timer(htimer_t* timer) { char str[DATETIME_FMT_BUFLEN] = {0}; datetime_t dt = datetime_now(); datetime_fmt(&dt, str); printf("> %s\n", str); hio原创 2021-02-07 13:42:01 · 7487 阅读 · 1 评论 -
libhv教程06--创建一个简单的TCP服务端
下文以TCP echo server为例,使用libhv创建TCP服务端。- `setThreadNum`:设置IO线程数- `setMaxConnectionNum`:设置最大连接数- `setLoadBalance`: 设置负载均衡策略(轮询、随机、最少连接数)- `setUnpack`:设置拆包规则(固定包长、分界符、头部长度字段)- `withTLS`:SSL/TLS加密通信原创 2021-02-07 12:10:18 · 12743 阅读 · 10 评论 -
libhv教程05--事件循环以及定时器的简单使用
事件循环简介很多同学不理解事件循环的概念,所以这里有必要前置说明一下。对于大多数长时间运行程序来说,都会有主循环的存在。如窗口界面程序,就是等待键盘、鼠标等外设的输入,界面做出相应的变化。典型的如windows窗口消息机制// windows窗口消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg);}此循环所在的线程我们称原创 2021-02-07 01:06:06 · 11969 阅读 · 1 评论 -
libhv教程04--编写一个完整的命令行程序
编写一个完整的命令行程序首先,一个完整的命令行程序应该包含哪些功能?命令行参数解析配置文件解析打印帮助信息和版本信息信号处理日志pid文件如果是服务端长时间运行后台程序,还需要看门狗(崩溃自动重启)看看libhv是如何提供这些功能的,参考示例代码见hmain_test.cpp编译运行:$ c++ -std=c++11 examples/hmain_test.cpp -o bin/hmain_test -I/usr/local/include/hv -lhv$ bin/hmain原创 2021-02-06 13:05:08 · 6778 阅读 · 6 评论 -
libhv教程03--链库与使用
链库与使用在上一篇中,我们已经生成了头文件与库文件,接下来我们写个测试程序链库验证下。原创 2021-02-06 00:42:19 · 11277 阅读 · 12 评论 -
libhv教程02--编译与安装
编译与安装libhv提供了原生Makefile(这里仅指适用于类unix系统的Makefile)和cmake两种构建方式。Makefile命令行cmake命令行cmake图形界面原创 2021-02-05 22:19:39 · 19930 阅读 · 12 评论 -
libhv教程01--介绍与体验
介绍与体验名称由来libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了带非阻塞IO和定时器的事件循环。libhv的名称也正是继承此派,寓意高性能的事件循环High-performance event loop library。libhv能干什么编写跨平台c/c++程序;基于TCP/UDP开发自定义协议网络程序;编写HTTP客户端/服务端程序;参考学习价值;libhv和libevent、libev、libuv有什么不同libevent最为古老、有历史包原创 2021-02-05 19:19:04 · 14534 阅读 · 3 评论 -
libhv教程00--目录
`libhv`是一个比`libevent、libev、libuv`更易用的跨平台国产网络库,用来开发`TCP/UDP/SSL/HTTP/WebSocket `客户端/服务端。项目地址:码云镜像:QQ技术交流群:**739352073**原创 2021-02-07 01:28:37 · 26405 阅读 · 16 评论 -
libhv FAQ
Q:libhv名称由来Q:libhv和libevent、libev、libuv有什么不同Q:libhv的定位Q:libhv的发展规划Q:libhv性能如何Q:libhv稳定性如何,是否商用Q:libhv如何入门Q:libhv如何使用Q:libhv如何交叉编译Q:libhv在Windows下如何编译Q:Windows下编译不过Q:Windows下链接不过Q:如何开启SSL/TLS、https、wss功能Q:Windows下如何集成openssl原创 2020-07-30 23:15:19 · 6351 阅读 · 6 评论 -
libhv接口手册
libhv是一个跨平台的类似libevent、libev、libuv的异步事件驱动库,但提供了更加接近原生的API接口和更加丰富的协议。libhv已广泛实用在公司的IOT平台、http API服务之中,正确性、稳定性、可扩展性、性能都有保证,完全开源,请放心使用。项目地址:https://github.com/ithewei/libhv.git码云镜像:https://gitee.com/i...原创 2020-01-14 17:28:46 · 33582 阅读 · 11 评论 -
libhv每日一学
文章目录libhv简介libhv应用程序框架libhv事件循环使用入门libhv日志模块介绍libhv如何实现跨平台的libhv中的宏艺术c语言如何实现c++的继承libevent、libev、libuv、libhv、boost.asio、poco、muduo七种echo-server实现对比libhv简介libhv是一个跨平台的类似libevent、libev、libuv的异步事件驱动库,但...原创 2020-01-09 11:37:10 · 19158 阅读 · 11 评论 -
纪念libhv上github trending
2020年11月15日,libhv上了github trending c语言榜第一名。特作此文以纪念。文章目录libhv为何物libhv发展历程libhv的定位libhv和libevent、libev、libuv有什么不同libhv后续规划更多参考资料libhv为何物libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了更简单的接口和更丰富的协议。详细介绍见项目README项目地址:https://github.com/ithewei/libhv.git码云镜像:ht原创 2020-11-15 15:25:15 · 2629 阅读 · 4 评论 -
c++编写HTTP API服务端/客户端最简单的库,没有之一
libhv是c++编写HTTP API 服务端/客户端最简单的库,没有之一。具有以下特性:跨平台(Windows, Linux, Mac);支持RESTful;支持application/json、application/x-www-form-urlencoded、multipart/form-data;内置web service文件服务和indexof service目录服务;原创 2020-01-20 19:44:51 · 36336 阅读 · 15 评论 -
国产开源库libhv为何能被awesome-c和awesome-cpp收录
近日,国产开源库libhv为awesome-c、awesome-cpp所收录,让我们看一下这个异军突起的libhv库究竟有何出色之处以及它和libevent、libev、libuv这些老牌网络库有何不同。原创 2020-03-17 14:58:25 · 7824 阅读 · 0 评论