
linux网络编程
patientcat
这个作者很懒,什么都没留下…
展开
-
有关于epollout事件触发的实验&epoll坑
epollout事件触发机制 & epoll坑文章目录epollout事件触发机制 & epoll坑epoll机制实验服务器端客户端验证开始验证一:epoll底层红黑树只允许插入单个key结论验证二:EPOLLOUT的触发时机LTET在网上看了很多关于epollout事件触发的文章,说的有点千奇百怪。一头雾水。之前自己做的实验也无法验证,一直没有思路,昨天晚上看epoll原理图...原创 2019-03-21 12:11:23 · 3675 阅读 · 2 评论 -
minimuduo库01——singsing库介绍
singsing这算做是学习muduo后的一个小总结吧。这个库的完善基本代表着我自己对muduo库的理解逐渐加深。介绍需要你有如下概念线程池function/bind实现回调函数熟悉Reactor或者读过我的关于Reactor的文章。同muduo一样,我也是将库中的文件大概分为了两类base库和net库。其中base库放的都是一些比如时间类的基础。net库则是放的一些有关网络的东...原创 2019-06-26 22:22:58 · 340 阅读 · 0 评论 -
使用C++实现简单Reactor
Reactor介绍有了c语言实现的基础,使用c++来写Reactor就非常容易了。首先介绍的就是Reactor的三大组件。handlerdemultiplexerreactorhandlerhandler负责抽象事件。设置fd设置关注的事件类型设置回调函数等基本事件。reactorreactor负责将handler注册到demultiplexer上。demul...原创 2019-06-26 21:35:13 · 2412 阅读 · 1 评论 -
C语言实现简单的Reactor
Reactor介绍Reactor模式网上有很多讲解,我这里不想过多介绍。其核心共有三个。抽象的事件事件多路分发器一个Reactor用来管理整个流程reactor by cReactor是我们从代码中抽取出来方便我们进行管理的。但这里我们完全不去管它。很暴力地使用面向过程的思想去做。抽象的事件——直接被我们具体化为fd事件多路分发器——直接被我们具体化为epoll代码思路...原创 2019-06-26 20:30:17 · 2555 阅读 · 1 评论 -
minimuduo库04补充——TcpConnection的断开
TcpConnection的断开TcpConnection的断开涉及生存期的管理。如果有兴趣,强烈建议去看看的陈硕的《linux网络编程》当客户端有消息到来时当客户端有消息发送过来时,此时我们收到read的返回值后。假设对端断开,我们收到n=0。此时我们不能直接将handler或者TcpConnection删除。因为我们此时仍然处于handler和TcpConnection对象的调用栈中...原创 2019-07-01 22:18:34 · 152 阅读 · 0 评论 -
minimuduo库04——TcpConnection
TcpConnection这个类就是用来帮助我们管理连接的。在最开始之前,仅仅凭照之前的一些使用经验,想想需要哪些东西。connfd。这个会被我们抽象成一个Handler。应用层缓冲区。为什么需要应用层缓冲区?——请查看muduo手册《Muduo Manual》中关于应用层缓冲区的设定。收和接我们希望当connHandler就绪的时候,自动去回调我们设置给它的回调函数——handl...原创 2019-07-01 21:44:47 · 199 阅读 · 0 评论 -
minimuduo库03——TcpServer
TcpServer仔细想了想自己之前在写server端的时候,发现从listenfd的初始化直到收到新的连接之前,一直都是重复的工作。因此可以抽象出一个Acceptor出来。没有Acceptor先看没有Acceptor的情况。我们在TcpServer中完成listenfd的初始化,一直到给Handler设置回调函数。大致的伪代码如下TcpServer{int lfd = initLi...原创 2019-07-01 20:47:14 · 191 阅读 · 0 评论 -
线程池4cpp
线程池思想线程池的核心思想相对于one TcpConnection per thread来说。有如下优点。频繁创建和消耗线程开销很大,如果业务很短,开销比创建线程还小,那么就得不偿失。线程池采用固定大小的线程数,减少了这部分消耗。大并发会导致起非常多的线程,从而吃光内存。多线程并非很多线程就很好。实际上和CPU的核心数有关。APIclass ThreadPool{public...原创 2019-06-05 12:11:55 · 202 阅读 · 0 评论 -
时间精度引发的一个问题
时间精度引发的一个问题文章目录时间精度引发的一个问题问题描述1. 原因2. 结论问题描述最近在muduo库-LogFile类中遇到这么一个问题。测试程序如下std::unique_ptr<muduo::LogFile> g_logFile;void outputFunc(const char* msg, int len){ g_logFile->append(...原创 2019-04-03 20:11:39 · 253 阅读 · 0 评论 -
ET模式下EPOLLIN和EPOLLOUT同时返回
EPOLLIN和EPOLLOUT同时返回问题ET模式下这是自己实验时,发生的一个现象,同时注册EPOLLIN和EPOLLOUT事件,当读事件就绪时,返回的flag带有EPOLLIN和EPOLLOUT。矛盾对于我们来说,判断读事件和写事件就绪的条件是reported后的flag。现在ET模式下。当读事件由低电平到高电平时,读事件就绪,可以理解。但写事件由高电平还是高电平,却触发。那么就会导...原创 2019-03-21 16:44:42 · 1237 阅读 · 0 评论 -
minimuduo库02——ReactorThreadPool
网络模型在之前的一些作品中,我已经介绍了三种网络模型。分别为each TcpConnection per threadthreadPoolsingle-thread Reactor现在这个库的网络模型将采用multi-Reactor + threadPool这个模型。也是Reactor模式的成熟模型。我们将拥有一个ReactorThreadPool这么一个类。其功能就是启动num...原创 2019-06-26 23:13:04 · 407 阅读 · 0 评论