- 博客(13)
- 收藏
- 关注
原创 服务器处理客户端请求的设计方法
文章摘要: 本文介绍了四种处理多客户端网络请求的方法:1)"一请求一线程"方式为每个客户端创建独立线程,但内存消耗大;2)select实现IO多路复用,通过监控所有socket提高效率;3)poll方法简化了select的参数设置;4)epoll采用事件驱动机制,通过epoll_create、epoll_ctl和epoll_wait三个函数高效管理连接。文章详细展示了每种方法的代码实现,重点比较了它们的优缺点,最终推荐epoll作为高性能网络编程的首选方案。
2025-12-14 21:15:11
850
原创 百万并发项目实现
④内核连接跟踪表限制 - 加载nf_conntrack模块并调整跟踪表大小。①进程级文件描述符限制 - 调整ulimit增加单个进程的fd上限。③系统级文件打开数限制 - 调整fs.file-max系统全局参数。②客户端源端口耗尽 - 通过客户端端口轮询连接服务器多个不同端口。⑤服务器处理性能瓶颈 - 单线程epoll架构改为多线程工作模型。⑥内存使用效率优化 - 调整TCP内存参数减少单连接内存开销。不建议用云服务器,因为连接时间长。
2025-11-18 14:58:23
122
原创 TCP服务器功能实现
但是一请求一线程有明显的缺点,此方法对于多个客户的情况,只能通过应用协议进行区分(对信息设置特定内容区分)。随着客户端增加(如百万),占用内存增大,就不适用了。创建epoll实例,成功返回文件描述符;向epoll实例添加、修改、删除要监控的文件描述符。2、多客户端请求时候,并发服务器。等待监控的文件描述符上发生事件。成功:发送事件的文件描述符数量。IO多路复用,epoll。1、基础部门,网络编程。
2025-11-01 23:01:15
190
1
原创 HTTP客户端请求方法
本文介绍了使用C语言实现HTTP请求的基本流程。首先通过DNS解析获取目标网址的IP地址,然后建立TCP连接并发送HTTP请求。代码示例展示了如何创建socket通道、发送HTTP请求报文(GET方法)和接收服务器响应。程序使用select监控socket状态,实现超时处理和数据接收。核心步骤包括:域名解析、TCP连接建立、HTTP请求构造与发送、响应数据接收处理。该实现遵循HTTP/1.1协议规范,支持非阻塞IO操作,适用于基础的网络通信应用开发。完整代码演示了从输入URL到获取网页内容的完整过程。
2025-10-31 16:32:37
476
原创 DNS协议与请求
本文介绍了使用C语言实现UDP协议进行DNS查询的编程过程。主要包括DNS报文头部结构体定义、问题部分的构造、域名格式转换(如将"www.google.com"转换为"3w6google3com0")、请求数据打包和发送接收等关键步骤。重点讲解了如何通过UDP套接字发送DNS请求并接收响应,体现了UDP协议在DNS查询中速度快、效率高的优势。完整代码展示了从域名解析到网络通信的实现过程,可作为学习网络编程的参考案例。
2025-10-29 13:46:58
536
1
原创 MySQL数据库
MySQL数据库远程连接与编程实践摘要: 本文介绍了MySQL远程连接配置方法,使用MySQL Workbench工具进行数据库管理,包括查询、用户管理、备份恢复等功能。详细讲解了通过Xshell连接MySQL服务器的步骤,并演示了在Workbench中创建数据库的操作流程。重点阐述了C语言操作MySQL数据库的编程实现,包括数据插入、查询、删除等CRUD操作,提供了完整的代码示例和错误处理。此外,还介绍了存储过程的使用方法和图片数据存储的实现,通过文件读取将图片信息存入数据库缓冲区。文章配有详细的操作截图
2025-10-27 22:36:10
724
1
原创 线程池的实现
本文介绍了一个基于C语言的线程池实现方案。首先定义了链表插入和移除的宏操作,然后设计了任务队列、执行队列和管理组件的结构体。接着实现了线程池的核心功能:包括创建线程池、销毁线程池、添加任务以及线程回调函数。最后提供了一个测试用例,创建20个线程处理1000个任务,每个任务打印其索引号后释放资源。该线程池通过互斥锁和条件变量实现线程同步,能够有效管理多任务并发执行。
2025-10-23 16:54:27
317
1
原创 多线程并发锁的实现
本文介绍了多线程并发计数到100万时防止数据竞争问题的四种同步方法:1)互斥锁适合处理复杂临界区但会带来线程切换开销;2)自旋锁适用于短临界区操作,通过忙等待避免切换;3)原子操作直接硬件级实现,效率最高但功能有限;4)CAS方法具有跨平台灵活性,但需处理ABA问题。文章通过代码示例展示了各种实现方式,并指出应根据具体场景选择合适方案,简单计数推荐原子操作,复杂临界区使用锁机制,而CAS则介于两者之间。
2025-10-22 22:45:43
310
1
原创 多线程并发锁的实现
创建十个线程进行下发,共用一个count,计数到100万。十个线程进行计数,会出现混用情况,需要加锁一遍不会导致在一个流程没有结束时候另一个线程进入。:mutex,锁内存在线程时,再来一个就会存在线程切换。适用于锁内容多情况。(内容少不宜用,因为线程切换可能浪费时间):spinlock,锁内存在线程时,再来一个就会while(1),在外等候。适用于锁内容小情况。:直接写子函数完成流程,不存在上述问题。:软件层面通用,可实现跨平台。
2025-10-20 19:23:51
586
原创 实现通讯录(结构体)
文件保存时候,是一个个进去存储,输入进去之后,要用fflush(fp)。因为只用fprintf(fp," %s %s ",item->name,item->phone),只是存到缓存,需要刷新进文件。代码内容不要出现数字,将数字和输出这些内容放入定义,以便后期统一修改操作。注:操作时候如果要更改链表内容,需要改变地址,要使用二次指针**这样去定义。大部分内容都是指针实现功能,下面写几个编程时候注意的点和不常见的使用方式。fclose:关闭一个打开的文件。feof:是否读到文件的结尾。
2025-10-14 23:15:03
633
原创 统计文件单词数量
先执行编译器,count表示执行名称,count.c表示执行的文件。第二行第二个命令代表上文argv[1]状态机:开始在外部,之后外部是分隔符,内部是字母。
2025-10-13 22:02:17
131
原创 Linux命令操作
注:cat操作读文件时候不能更改,可以用vim文本编译器(Linux中的文本编译器需安装);进入vim后输入i可进行操作,退出时esc+①:p 退出 ②:p!再用这个命令删除所有文件和子目录(慎用);mv 文件名 目录/ ##将文件移动到目录下。more:一页一页显示(enter显示一行);mkdir:创建一个新的目录;tac:从最后一行开始显示;tail:只看尾巴几行;pwd:显示目前目录;cp:复制文件或目录;rm:移除文件或目录;mv:移动文件与目录;head:只看头几行;
2025-10-12 11:29:17
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅