![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++11重写muduo网络库
文章平均质量分 71
贪睡的蜗牛
记性不好,那就多写博客。。。。
展开
-
高性能IO框架库libevent(四):bufferevent
bufferevent由一个底层的传输端口(如套接字),一个读取缓冲区和一个写入缓冲区组成。与通常的事件在底层传输端口已经就绪,可以读取或者写入的时候执行回调不同的是,bufferevent在读取或者写入了足够量的数据之后调用用户提供的回调。也请注意:当前bufferevent只能用于像TCP这样的面向流的协议,将来才可能会支持像UDP这样的面向数据报的协议。很多时候,除了响应事件之外,应用还希望做一定的数据缓冲。- 记住写入了多少数据,如果还有更多数据要写入,等待连接再次可以写入。- 写入尽量多的数据。原创 2022-12-18 22:51:45 · 379 阅读 · 0 评论 -
muduo网络库—分布式系统知识精要
每个数据块都分割到分布式许多服务器上,因此每个服务器都存储了一个较小的数据块。首先,由于高带宽和低时延,在需要数据的客户端向存储数据的服务器发送数据请求后,这些服务器几乎同时向客户端发送数据,导致大量数据流同时涌向网络。又由于交换机缓冲区空间有限,这种流量很容易就会将其溢出,接着发生丢包,TCP 通过超时重传进行恢复。超时的时间通常至少要几百毫秒。需要超时重传的服务器会进入超时等待。由于同步的传输模式,多个服务器可能会同时进入这种等待。原创 2022-10-16 20:42:27 · 842 阅读 · 0 评论 -
C++11重写muduo网络库7——TcpServer(待完善)
TcpServer对象构造的时候,就会同时构造Acceptor对象和threadPool_对象,并调用Acceptor::setNewConnectionCallback方法,把TcpServer::newConnection传给成员Acceptor::newConnetionCallback_,Acceptor::newConnetionCallback_又会在新连接到来时在Acceptor::handleRead中调用。下面以回显服务器作为例子。原创 2022-09-27 10:56:48 · 450 阅读 · 0 评论 -
C++11重写muduo网络库6——Acceptor模块
还有一种解决方案:ET模式下通常的做法是发生EMFILE之后epoll_ctl(…)一下监听套接字以便再次触发。也就是重新注册监听套接字的可读事件(当然没有上面的方案好,但也是一种思路)原创 2022-09-25 09:25:03 · 562 阅读 · 0 评论 -
C++11重写muduo网络库5——Thread,EventLoopThread,EventLoopThreadPool
Thread类只关于一个线程,EventLoopThread类用于绑定一个EventLoop和一个Thread,在一个Thread里创建一个EventLoop,让这个Thread执行一个EventLoop,即:one loop per thread。上面的Thread只关注线程,现在是针对EventLoop的线程,这个EventLoopThread里面包含了一个EventLoop的指针和一个Thread类对象。IO线程池,封装多个IO线程EventLoopThread,并保存每个IO的线程的loop。原创 2022-09-23 20:09:27 · 634 阅读 · 0 评论 -
C++11重写muduo网络库4——EventLoop(封装Channel和Epoller)
持续循环监听,EventLoop整合封装了Channel和Poller并向上提供了更方便的接口来使用,也就是持续循环的获取监听结果并且根据结果调用处理函数。Channel类起到了将fd及其相关属性封装的作用,将fd及其感兴趣事件和发生的事件以及不同事件对应的回调函数封装在一起Poller包含了Channel对象负责从事件监听器上获取监听信息,并有接口让Channel做出反应。EventLoop包含了Poller类,起到一个驱动循环。原创 2022-09-23 14:43:17 · 893 阅读 · 0 评论 -
(待修改)C++11重写muduo网络库4——poller抽象类和EPollPoller——muduo库中多路事件分发器的核心IO复用模块
Poller是抽象类。原创 2022-09-22 09:06:30 · 315 阅读 · 0 评论 -
C++11重写muduo网络库3—Channel库(channel模块待补充完善)
相当于是muduo库提供给外部编写服务器程序的入口的一个类,相当于一个大箱子,事件循环相当于是一个epoll,管理相当于是epoll抽象的概念,用poller当做1个基类,在派生类中实现了poll和epoll里面还得需要监听socket是具体的发生的事件我们理解成通道,相当于就是fd和它所绑定的感兴趣的event,如EPOLLIN、EPOLLOUT 还绑定了epoller返回时fd上发生的事件(绑定)。原创 2022-09-20 16:55:22 · 9610 阅读 · 0 评论 -
C++11重写muduo网络库2—Cmake,nocopyable,logger,Timestamp,InetAddress
这样继承后派生类都被限制不能进行拷贝构造和赋值,这样是为了避免在所有的类中都要有禁止拷贝构造和赋值的代码。4、toIpPort()成员函数方法(将sockaddr类型转换为ip:port字符串类型)5、toPort()成员函数方法(将sockaddr类型转换返回port的字符串类型)1、构造函数 用ip和端口初始化(默认端口为0 ip为本地127.0.0.1)3、toIp成员函数方法 (将sockaddr的ip转换为网络字节序的ip)4、toString成员函数(将现在时间格式转换为string类型的)原创 2022-09-19 14:41:22 · 535 阅读 · 1 评论 -
linux系统搭建Boost和muduo环境
本文针对linux系统。原创 2022-09-12 15:39:20 · 634 阅读 · 0 评论 -
C++11重写muduo网络库——预备知识
阻塞,非阻塞,同步,异步描述的都是I/O的一些状态,一个典型的网络I/O包含2个阶段:数据准备(数据就绪)和数据读写,比如说recv,传一个sockfd,buf,buf的大小,数据就绪就是远端有没有数据过来,就是内核相应的sockfd对应的TCP接收缓冲区是否有数据可读,当sockfd,当I/O工作在阻塞模式下的话,当我们调用recv的时候,如果数据没有就绪,recv是会阻塞当前的线程的。原创 2022-09-11 20:30:02 · 1649 阅读 · 0 评论