自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 11.1 KV存储——基于三种网络模型、四种KV引擎、支持多语言访问

本项目实现了一个模块化键值存储系统,采用分层架构设计:网络层支持Reactor/Proactor/协程模型,存储层提供数组/哈希表/红黑树/跳表四种引擎。文章以Reactor+数组组合为例,详细解析了从连接建立、请求处理到响应返回的完整流程,包括epoll事件驱动机制、协议解析和数组存储引擎的核心操作。系统采用文本协议实现多语言兼容,支持SET/GET/DEL等基础命令。通过回调函数和配置化设计,实现了网络层与存储层的解耦,展现了高性能KV存储系统的核心实现原理。

2025-08-13 23:10:33 902

原创 11.2 基于协程与JSON的轻量级C语言RPC框架设计与实现

本文提出了一种基于协程与JSON的轻量级C语言RPC框架ZRPC。该框架采用协程机制实现高并发处理能力,使用JSON作为通信数据格式保证跨平台兼容性。系统包含客户端(zrpc_client.c)、服务器(zrpc_server.c)和核心库(zrpc.c)三个主要组件,通过配置文件register.json实现服务注册与发现。服务器端利用nty_coroutine协程库处理并发请求,客户端通过本地函数调用透明地访问远程服务。框架采用包头-包体协议确保数据传输完整性,并支持动态加载业务逻辑(libzrpc_m

2025-08-13 21:16:13 1313

原创 11.3 DPDK应用开发—构建TCP/UDP协议栈实现数据收发、构建DNS服务器

摘要:本文详细介绍了基于DPDK的高性能网络编程实践,包括UDP/TCP协议处理和DNS服务器实现。主要内容涵盖:1) DPDK环境初始化与内存池创建;2) 网卡端口配置与数据包收发机制;3) UDP/TCP协议解析与状态机实现;4) 自定义epoll原理;5) 基于开源DNS库构建高性能DNS服务器。实验表明,DPDK能显著提升网络处理性能,跳过内核协议栈实现用户态直接处理网络数据包。文章提供了完整的代码实现框架和关键配置参数说明,为开发高性能网络应用提供了实践参考

2025-08-11 22:05:21 1129

原创 十、内核网络协议栈效率低,如何绕开内核,实现更高性能网络?——DPDK技术

DPDK技术通过绕过内核协议栈实现高性能网络处理。其核心原理包括:1)使用UIO/VFIO技术将网卡数据直接映射到用户空间;2)采用巨页技术减少TLB缺失;3)轮询模式替代中断处理;4)CPU亲和性绑定减少上下文切换。主要组件包含EAL环境抽象层、Ring队列管理、Mempool内存池和mbuf缓冲区。相比传统Linux网络栈,DPDK避免了数据复制和系统调用开销,特别适合高并发场景。配置过程涉及多队列网卡设置、巨页调整、模块加载等步骤。该技术显著提升了网络数据包处理效率,但需专用硬件支持和特定环境配置。

2025-08-11 22:05:12 1157

原创 1_网络编程知识体系总结(陆续补充更新)

本文系统梳理了网络编程知识体系,分为基础理论、高并发处理、性能优化和项目实践四个部分。基础部分涵盖网络I/O、协议、套接字等核心概念;高并发处理探讨IO多路复用、多进程/线程模型及Reactor模式;性能优化涉及异步I/O、协程和DPDK技术;最后提供KV存储、RPC框架等实战项目案例。文章以问题驱动方式展开,逐步深入网络编程的各个进阶领域,并附有相关技术书籍和开源项目参考。

2025-08-11 22:01:09 637

原创 Linux 网络编程:epoll 为何能实现高并发?非阻塞 socket 又是什么?

问题解答epoll 为什么能实现多并发?它只监听“有事件”的 fd,不遍历所有连接,效率极高非阻塞 socket 有什么用?防止某个连接阻塞线程,是高并发编程的关键epoll + 非阻塞 有什么好处?单线程就能同时处理上万个连接,是构建高性能服务器的基础。

2025-05-29 19:07:54 404

原创 使用 C 语言实现一个简易 HTTP 客户端(含详细中文注释 + 语法解析)

本文介绍了一个用C语言实现的简易HTTP客户端程序。代码实现了完整的HTTP请求流程:通过DNS解析域名获取IP地址,创建TCP套接字连接到80端口,构造并发送GET请求报文,使用select非阻塞方式接收服务器响应。关键功能包括域名解析、socket通信、HTTP报文构造和响应处理。程序展示了网络编程的基础流程,涉及字符串处理、内存管理、socket API和非阻塞编程等核心技术。通过这个项目可以学习到网络通信的基本原理和C语言网络编程的实现方法。

2025-05-29 16:08:47 648

原创 用 C 语言实现简单 DNS客户端查询域名的 IP 地址

本文介绍了如何使用C语言在Linux系统中实现一个简单的DNS查询客户端。主要内容包括:1) DNS请求头的构造,包含ID、标志位等关键信息;2) DNS查询构建,处理域名格式和查询类型;3) 通过UDP套接字发送请求和接收响应;4) 解析DNS响应获取IP地址;5) 客户端主函数实现。文章详细讲解了DNS协议的基本工作原理,并提供了完整的代码实现方法。通过这个示例,读者可以学习网络编程的基本技巧,理解DNS查询的底层实现机制,为开发更复杂的网络应用打下基础。

2025-05-27 17:22:13 712

原创 使用 C 语言操作 MySQL 实现用户管理与图像存储—— 代码结构分析与实现详解

define DAQIAO_DB_SERVER_PORT 3306 //端口号#define DAQIAO_DB_USERNAME "xxxxx" //用户名#define DAQIAO_DB_PASSWORD "xxxxxx" //密码#define DAQIAO_DB_DEFAULTDB "xxxxxxxx" //默认数据库定义了数据库连接的基本信息(IP、端口、用户名、密码、默认库)定义了常用 SQL 语句,包括插入、查询、删除用户,以及对图像字段的操作。

2025-05-27 15:34:28 1024

原创 Linux环境下用C语言实现线程池(3)—线程池的销毁与pthread线程包常用函数

本文介绍了线程池的销毁过程及pthread线程包的常用函数。线程池销毁时,首先遍历所有工作线程并标记为终止,随后加锁、广播通知线程退出、解锁,并清空线程和任务队列,最终返回成功状态。pthread常用函数包括:pthread_create(创建线程)、pthread_mutex_lock(加锁)、pthread_mutex_unlock(解锁)、pthread_cond_wait(等待条件变量)、pthread_cond_signal(唤醒单个线程)和pthread_cond_broadcast(广播唤醒所

2025-05-18 11:04:46 199

原创 Linux环境下用C语言实现线程池(2)—线程池中添加任务与线程任务的执行

本文介绍了线程池中任务的添加与执行过程。首先,通过nThreadPoolPushTask函数将任务添加到线程池的任务队列中,使用互斥锁确保多线程环境下的安全访问,并通过条件变量通知工作线程有新任务。其次,工作线程通过nThreadPoolCallback函数执行任务,线程在任务队列为空时阻塞,直到有新任务或收到终止信号。线程获取任务后,调用任务的执行回调函数完成任务处理,并在任务执行完毕后释放资源。整个过程通过互斥锁和条件变量实现线程间的同步与通信,确保线程池的高效运行。

2025-05-18 10:28:47 281

原创 Linux环境下用C语言实现线程池(1)—线程池的结构与创建

2.1 初始化线程池、条件变量、互斥锁。2.3 将线程加入线程池队列中。1.3 线程池管理器 (1. 线程池的基本结构。1.1 线程队列 (1.2 任务队列 (2.2 创建工作线程。

2025-05-18 00:04:11 209

原创 Linux系统下数据库MySQL远程连接出现的问题及解决办法

在Ubuntu中配置MySQL以连接MySQL Workbench时,需要修改my.cnf文件中的bind-address配置项。默认情况下,bind-address设置为127.0.0.1,仅允许本地连接。若需远程连接,应将其改为0.0.0.0或具体IP地址。然而,在/etc/mysql/my.cnf中未找到该选项。最终,在/etc/mysql/mysql.conf.d/mysqld.cnf文件中找到了bind-address,并将其修改为0.0.0.0,以允许所有IP地址远程连接。

2025-05-16 21:55:10 531

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除