跨平台事件循环库-libhv
2024-10-15 09:38:31 阿炯

libhv 是一个强大的跨平台C语言事件循环库,具有显著优点:高效的事件处理机制是构建高性能、响应迅速的应用程序的关键。其提供了丰富的事件类型支持,包括网络 I/O 事件、定时器事件、信号事件等。跨平台特性使得开发者可以在不同的操作系统上使用相同的代码进行事件处理,大大提高了开发效率。无论是在 Windows、Linux、BSD 还是其他操作系统平台上,libhv 都能稳定运行,为开发者提供一致的编程体验。


libhv是一个类似于libeventlibevlibuv的跨平台网络库,提供了更易用的接口和更丰富的协议。采用 BSD-3-Clause 许可协议授权。


特性

跨平台(Linux, Windows, macOS, Android, iOS, BSD, Solaris)
高性能事件循环(网络IO事件、定时器事件、空闲事件、自定义事件、信号)
TCP/UDP服务端/客户端/代理
TCP支持心跳、重连、转发、多线程安全write和close等特性
内置常见的拆包模式(固定包长、分界符、头部长度字段)
可靠UDP支持: WITH_KCP
SSL/TLS加密通信(可选WITH_OPENSSL、WITH_GNUTLS、WITH_MBEDTLS)
HTTP服务端/客户端(支持https http1/x http2 grpc)
HTTP支持静态文件服务、目录服务、正向/反向代理服务、同步/异步API处理器
HTTP支持RESTful风格、路由、中间件、keep-alive长连接、chunked分块、SSE等特性
WebSocket服务端/客户端
MQTT客户端


开发者可以轻松地注册各种事件,并在事件发生时执行相应的回调函数,提供了高效、灵活的事件处理解决方案。以下是一段使用 libhv 实现简单网络服务器的 C 代码示例:

#include <stdio.h>
#include <hv/hloop.h>
#include <hv/hsocket.h>

void on_accept(hio_t* io) {
hio_t* client_io = hio_accept(io);
if (client_io) {
    printf("Accepted a new connection.\n");
    hio_set_opaque(client_io, (void*)"client");
    hio_read_start(client_io, on_read);
}
}

void on_read(hio_t* io) {char buf[1024];

int nread = hio_read(io, buf, sizeof(buf));

if (nread > 0) {
    buf[nread] = '\0';
    printf("Received data: %s\n", buf);
    hio_write(io, buf, nread);
} else if (nread == 0) {
    printf("Connection closed by peer.\n");
    hio_close(io);
} else {
    printf("Read error.\n");
    hio_close(io);
}
}

int main() {
hloop_t* loop = hloop_new();

hio_t* listen_io = hio_create_socket(loop, AF_INET, SOCK_STREAM, 0);

hio_set_opaque(listen_io, (void*)"server");

sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(8080);

hio_bind(listen_io, (const struct sockaddr*)&servaddr, sizeof(servaddr));

hio_listen(listen_io, 128);

hio_setcb(listen_io, on_accept);

hloop_run(loop);

hloop_free(&loop);

return 0;
}


在这个示例中使用 libhv 创建了一个简单的 TCP 服务器。当有客户端连接时,on_accept 回调函数会被触发,接受连接并开始读取客户端发送的数据。当有数据可读时,on_read 回调函数会被调用,处理接收到的数据并将其回传给客户端。libhv 还具有高效的事件循环机制,能够快速地检测和处理各种事件。它采用了优化的算法和数据结构,确保在高并发情况下也能保持良好的性能。此外,libhv 的 API 设计简洁明了,易于使用。开发者可以快速上手并利用其强大的功能构建各种类型的应用程序,从简单的命令行工具到复杂的网络服务器和分布式系统。它的跨平台特性、丰富的事件类型支持和高效的事件循环机制使得它在各种应用场景中都能发挥重要作用。

最新版本:1.3


项目主页:https://github.com/ithewei/libhv