当前位置: 首页 > wzjs >正文

百度认证官方网站站长工具seo综合查询下载安装

百度认证官方网站,站长工具seo综合查询下载安装,陕西省高速集团建设网站,我要自学网app免费版一、概念 Libevent 提供了高效的 TCP 网络编程接口,使开发者能够轻松构建高性能的 TCP 服务器和客户端。本指南将详细介绍如何使用 Libevent 进行 TCP 网络开发。 核心组件 事件基 (event_base) - 事件处理的核心结构 事件 (event) - 表示单个事件 缓冲区事件 (bufferevent)…

一、概念

Libevent 提供了高效的 TCP 网络编程接口,使开发者能够轻松构建高性能的 TCP 服务器和客户端。本指南将详细介绍如何使用 Libevent 进行 TCP 网络开发。

核心组件

  1. 事件基 (event_base) - 事件处理的核心结构

  2. 事件 (event) - 表示单个事件

  3. 缓冲区事件 (bufferevent) - 带缓冲的 I/O 事件

  4. 监听器 (evconnlistener) - TCP 连接监听器

  5. 缓冲区 (evbuffer) - 高效的数据缓冲区

常用 API

事件基

  • event_base_new() - 创建新的事件基

  • event_base_free() - 释放事件基

  • event_base_dispatch() - 开始事件循环

  • event_base_loopexit() - 退出事件循环

事件

  • event_new() - 创建新事件

  • event_free() - 释放事件

  • event_add() - 添加事件到事件基

  • event_del() - 从事件基中删除事件

缓冲区事件

  • bufferevent_socket_new() - 创建新的缓冲区事件

  • bufferevent_setcb() - 设置回调函数

  • bufferevent_enable() - 启用事件

  • bufferevent_write() - 写入数据

  • bufferevent_read() - 读取数据

event与bufferevent

普通事件(event)‌:基础事件类型,用于监听文件描述符的可读/可写状态、信号、定时器等单一事件触发。用户需手动管理I/O操作和缓冲区的数据读写‌。比如:监听socket的可读事件后,需自行调用read()读取数据并处理粘包/分包问题‌。
缓冲区事件(bufferevent):高级封装的事件类型,内置输入/输出缓冲区(evbuffer结构体),自动处理底层I/O的读写操作和数据缓冲。用户只需通过回调函数处理已就绪的数据‌。比如:收到数据时自动填充输入缓冲区,触发读回调;用户调用bufferevent_write()时,数据先写入输出缓冲区,由libevent自动发送‌。

特性普通事件(event)缓冲区事件(bufferevent)
数据缓冲需用户手动管理内置输入/输出缓冲区,自动管理
水位控制不支持支持设置高/低水位标记‌
适用场景信号、定时器、低层I/O控制流式网络通信(如TCP服务)
多线程支持需额外同步机制提供线程安全的缓冲区操作接口‌

二、TCP 服务器开发

1. 基本服务器框架

#include <event2/listener.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <arpa/inet.h>// 定义回调函数
void read_cb(struct bufferevent *bev, void *ctx);
void event_cb(struct bufferevent *bev, short events, void *ctx);
void accept_conn_cb(struct evconnlistener *listener, evutil_socket_t fd,struct sockaddr *address, int socklen,void *ctx);int main() {// 1. 创建事件基struct event_base *base = event_base_new();if (!base) {fprintf(stderr, "Could not initialize libevent!\n");return 1;}// 2. 配置服务器地址struct sockaddr_in sin;memset(&sin, 0, sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(8080);  // 监听8080端口sin.sin_addr.s_addr = htonl(INADDR_ANY);  // 监听所有接口// 3. 创建监听器struct evconnlistener *listener = evconnlistener_new_bind(base, accept_conn_cb, NULL,LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, -1,(struct sockaddr*)&sin, sizeof(sin));if (!listener) {fprintf(stderr, "Could not create a listener!\n");return 1;}// 4. 启动事件循环event_base_dispatch(base);// 5. 清理资源evconnlistener_free(listener);event_base_free(base);return 0;
}

2. 连接接受回调

void accept_conn_cb(struct evconnlistener *listener, evutil_socket_t fd,struct sockaddr *address, int socklen,void *ctx) {struct event_base *base = evconnlistener_get_base(listener);// 为新的客户端连接创建buffereventstruct bufferevent *bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);if (!bev) {fprintf(stderr, "Error constructing bufferevent!");event_base_loopbreak(base);return;}// 设置回调函数bufferevent_setcb(bev, read_cb, NULL, event_cb, NULL);// 启用读写事件bufferevent_enable(bev, EV_READ | EV_WRITE);// 可选: 设置水位标记bufferevent_setwatermark(bev, EV_READ, 0, 4096); // 最大读取4096字节
}

3. 数据读取回调

void read_cb(struct bufferevent *bev, void *ctx) {struct evbuffer *input = bufferevent_get_input(bev);size_t len = evbuffer_get_length(input);// 分配缓冲区unsigned char *buffer = malloc(len + 1);// 从输入缓冲区读取数据bufferevent_read(bev, buffer, len);buffer[len] = '\0';printf("Received %zu bytes: %s\n", len, buffer);// 回显数据bufferevent_write(bev, buffer, len);free(buffer);
}

4. 事件处理回调

void event_cb(struct bufferevent *bev, short events, void *ctx)

文章转载自:

http://z8CChqIt.qsfys.cn
http://FDPOWueW.qsfys.cn
http://J9aB3ZRX.qsfys.cn
http://PKaAiqpp.qsfys.cn
http://gK4F1zEq.qsfys.cn
http://tLl3uFbZ.qsfys.cn
http://i74N5rvm.qsfys.cn
http://mIe7iaDi.qsfys.cn
http://tVk97iDH.qsfys.cn
http://Q4S0gQIF.qsfys.cn
http://WiyjHuZc.qsfys.cn
http://nBy9YJbg.qsfys.cn
http://8TUs2ysy.qsfys.cn
http://W7grImpy.qsfys.cn
http://ZBHKfL2f.qsfys.cn
http://zyiyQ2rL.qsfys.cn
http://BXvoinMr.qsfys.cn
http://RDdmAoQL.qsfys.cn
http://edAPjxY1.qsfys.cn
http://zrgf43sP.qsfys.cn
http://pfNlXHwl.qsfys.cn
http://NqBi5JMq.qsfys.cn
http://iWbtvX2f.qsfys.cn
http://59loZvJs.qsfys.cn
http://ej75D9Kx.qsfys.cn
http://uc7AuWE0.qsfys.cn
http://nNKSW1pX.qsfys.cn
http://UebfDTl3.qsfys.cn
http://CRtuzi0k.qsfys.cn
http://HOEWJQQv.qsfys.cn
http://www.dtcms.com/wzjs/676969.html

相关文章:

  • 网页设计作品昆明官网seo技术
  • 母婴策划案的网站建设域名查询ip地址138
  • 小程序可做网站吗不懂见网站怎么办
  • 网站平台建设多少钱wordpress 图片 存储
  • 机关网站建设 方案自己做的旅游网站简介
  • 让别人做网站需要注意什么问题网站数据建设涉及哪些内容
  • 雅安北京网站建设玉树电子商务网站建设多少钱
  • 濮阳市网站怎么做宣传中国中信建设有限责任公司
  • 网站开发合同 深圳思网站建设模板购买
  • 推广的网站需要备案吗聊城做网站费用信息
  • 怎么在手机上制作网站开通网站空间
  • 汕头网站快速排名佛山网站设计特色
  • 昆明网络公司网站建设建设玩外汇平台网站
  • 南宁网站建设超博网络学雷锋 做美德少年网站
  • 2万元建设网站贵吗谷歌seo搜索引擎
  • 寺院网站建设方案互联网行业怎么赚钱
  • 建设网站对服务器有什么要求吗网站平台搭建
  • 注册了网站之后怎么设计自驾游自由行网站建设
  • 站酷网站建设网站举报中心官网
  • 书店网站建设方案网站建设教程怎么建
  • 网站快速备案安全吗网站流量怎么变现呢
  • 成都淮洲新城建设投资有限公司网站手机排行榜2021销量排行
  • 公司给别人做的网站违法吗中国室内设计联盟app
  • 网站设计兼容模式wordpress外网访问不了
  • pc蛋蛋游戏体验网站建设做的网站图片不显示
  • 电子商务网站建设设计网站服务器放在哪里好
  • 东莞网站建设多长时间红酒企业网站模板免费下载
  • 买完域名后如何建设网站瑞诺国际的员工数量
  • 网站推广排名外包飞天云服务器
  • 做哪种网站流量上的快网站规划与建设 ppt