tinyserver 使用进程池+epoll方式实现的简单http服务器。父程序创建进程池,并监听客户端连接。父进程与子进程池之间利用管道进行通信,父进程将连接请求通知子进程处理(采用轮询方式选择),子进程完成客户端http请求处理过程。父子进程在接收到注册信号后调用信号处理函数进行处理。信号处理函数仅通知当前信号事件,逻辑处理交由用户态代码完成,避免信号处理时间过长(如果采用signal信号处理方式还可能导致信号丢失)。 实现模型图: cgi程序修改自J.David源码,以验证服务端逻辑功能。后续考虑抽象“子进程选择”功能,采用其他负载均衡策略测试。由于cgi会使用标准输入输出接口,故守护进程功能(daemon_init)未进行部署。 部署方法 make ./tinyserver 在浏览器输入:127.0.0.1:8001 如果POST命令不能正常显示返回结果,将htdocs目录下的cg
2022-08-08 20:30:15 38KB C++
1
网络IO管理 selectpollepoll编程实战_ReactorPreactor设计模式
2022-07-22 09:04:49 1.35MB 网络io select poll epoll
1
在linux系统下用epoll实现的简易聊天,简单的qq。所有源码都在里面,直接可运行,分为客户端和服务器两个文件夹
2022-07-16 17:00:56 4KB linux源码 epoll 简易聊天
1
运用到了epoll技术tcp协议实现,可以实现大量用户同时访问。
2022-06-22 20:13:22 4KB tcp epoll
1
个人实验性质的网络库,linux下C++,封装epoll模型。 实现了定时器管理。代码量700+行。
2022-06-06 21:19:44 5KB linux epoll 网络库
1
本内容适用于学习c++网络库如muduo的开发者,资源主要涉及muduo的底层封装如socket、channel、eventloop、tcpserver等内容,相信同学们在阅读完之后能够踏入学习muduo的大门哈!
2022-06-02 16:05:39 321KB muduo C++ epoll 网络编程
1
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中,有了一种替换它的机制,就是epoll。 select()和poll() IO多路复用模型 select的缺点: 1.单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差;(在linux内核头文件中,有这样的定义:#define __FD_SETSIZE 1024) 2.内核 / 用户空间内存拷贝问题,select需要复制大量的句柄数据
2022-05-22 10:07:10 174KB ep epoll epoll_ctl
1
服务器与客户端建立连接需要使用到一些接口,包括但不限于socket、bind、listen、accept.高并发编程会有一些服务器模型,例如reactor或proactor。这两类都要使用到IO多路复用,O多路复用是指单个进程/线程就可以同时处理多个IO请求。有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间(缺点:每次都要复制,开销大),由内核根据就绪状态修改该集合的内容。 poll:和select几乎没有区别,区别在于文件描述符的存储方式不同,poll采用链表的方式存储,没有最大存储数量的限制; epollepoll底层通过红黑树来描述,并维护一个ready list,将事件表中已经就绪的事件添加到这里,在使用epoll_wait调用时,仅观察这个list中有没有数据即可。
2022-05-20 11:01:07 53KB 服务器 网络
1
依赖了boost 库的线程池
2022-05-19 19:01:35 8KB epollserver
1
epoll接收数据封装为接口形式供线程调用
2022-05-07 23:25:16 3KB epoll 串口 linux
1