muduo网络库学习
文章平均质量分 88
对于我等菜鸟来说,好好地研究一下一个网络库的实现是很有必要的,muduo库相比ACE等大型库来说比较好入手,原作者也出了一本书可以结合着看。
https://github.com/JnuSimba/muduo_tests
s1mba
这个作者很懒,什么都没留下…
展开
-
muduo网络库学习之muduo_inspect 库涉及到的类
muduo inspect 库通过HTTP方式为服务器提供监控接口, 现在只实现进程相关信息的监控,通过成员ProcessInspector 实现。ProcessInspector // 通过ProcessInfo返回进程信息 ProcessInfo // 获取进程相关信息我们可以参照 ProcessInspector 实现一个如TcpStateInspector,作为原创 2013-11-13 21:31:00 · 3613 阅读 · 0 评论 -
muduo网络库学习之muduo_http 库涉及到的类
1、http request:request line + header + body (header分为普通报头,请求报头与实体报头)header与body之间有一空行(CRLF)请求方法有:Get, Post, Head, Put, Delete等协议版本1.0、1.1常用请求头Accept:浏览器可接受的原创 2013-11-13 16:33:04 · 5750 阅读 · 2 评论 -
muduo网络库学习之EventLoop(七):TcpClient、Connector
Connector 主要用于发起连接,并带有自动重连的功能,成员主要有一个channel_, C++ Code 1 boost::scoped_ptr channel_; // Connector所对应的Channel与Acceptor 相比少了一个acceptSocket_ 成员,因为Connector原创 2013-11-10 18:25:43 · 4794 阅读 · 0 评论 -
muduo网络库学习之EventLoop(六):TcpConnection::send()、shutdown()、handleRead()、handleWrite()
首先在EventLoop(五)基础上,在TcpConnection 构造函数中添加: C++ Code 123 // 通道可写事件到来的时候,回调TcpConnection::handleWritechannel_->setWriteCallback( boost::bind(&TcpConnection::ha原创 2013-11-10 13:19:54 · 3954 阅读 · 0 评论 -
muduo网络库学习之EventLoop(五):TcpConnection生存期管理(连接关闭)
监听套接字可读事件是POLLIN; 已连接套接字正常可读是POLLIN; 正常可写是POLLOUT; 对等方close/shutdown关闭连接,已连接套接字可读是POLLIN | POLLHUP;时序图分析:注意:将TcpConnectionPtr 在connections_ 中 erase 掉,时并不会马上 析构TcpConnection 对象(引用计数不为0),原创 2013-11-09 16:53:59 · 4542 阅读 · 3 评论 -
muduo网络库学习之EventLoop(四):EventLoopThread 类、EventLoopThreadPool 类
1、Socket 操作封装Endian.h封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。SocketsOps.h/ SocketsOps.cc封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。Socket.h/Socket.cc(Socket类)用RAI原创 2013-11-09 09:14:04 · 5618 阅读 · 0 评论 -
muduo网络库学习之EventLoop(三):Socket、Acceptor、TcpServer、TcpConnection(连接建立,接收消息)
1、AcceptorAcceptor用于accept(2)接受TCP连接Acceptor的数据成员包括acceptSocket_、acceptChannel_,Acceptor的acceptSocket_是listening socket(即server socket)。acceptChannel_用于观察acceptSocket_的readable事件,可读事件发原创 2013-11-08 17:47:28 · 4364 阅读 · 2 评论 -
muduo网络库学习之EventLoop(二):进程(线程)wait/notify 和 EventLoop::runInLoop
1、进程(线程)wait/notifypipesocketpaireventfdeventfd 是一个比 pipe 更高效的线程间事件通知机制,一方面它比 pipe 少用一个 file descripor,节省了资源;另一方面,eventfd 的缓冲区管理也简单得多,全部“buffer” 只有定长8 bytes,不像 pipe 那样可能有不定长的真正 buffer。原创 2013-11-08 10:24:58 · 5381 阅读 · 2 评论 -
muduo网络库学习之EventLoop(一):事件循环类图简介和muduo 定时器TimeQueue
1、EventLoop、Channel、Poller 等类图如下:黑色菱形:组合;白色菱形:聚合;白色三角形:继承;实线:关联;Channel是selectable IO channel,负责注册与响应IO 事件,它不拥有file descriptor。Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConn原创 2013-11-07 22:00:31 · 10424 阅读 · 0 评论 -
阻塞/非阻塞读写总结、tcp网络编程的本质、muduo::Buffer设计简介
一、阻塞/非阻塞读写总结1、对于read 调用,如果接收缓冲区中有 20字节,请求读 100个字节,就会返回 20;对于 write调用,如果请求写 100个字节,而发送缓冲区中只有 20个字节的空闲位置,那么 write会阻塞,直到把 100个字节全部交给发送缓冲区才返回。但如果 socket文件描述符有 O_NONBLOCK标志,则 write不阻塞,直接返回 20;此时非原创 2013-11-07 16:42:27 · 9967 阅读 · 0 评论 -
常见多线程与并发服务器设计方案举例
一、3点基础知识1、一个主机的端口号为所有进程所共享,但普通用户进程绑定不了一些特殊端口号如20、80等。 2、每个进程都有自己的文件描述符(包括file fd, socket fd, timer fd, event fd, signal fd),一般是1024,可以通过ulimit -n 设置,但所有进程打开的文件描述符总数有上限,跟主机的内存有关。3、一个进原创 2013-11-04 21:25:56 · 8232 阅读 · 1 评论 -
muduo网络库学习之Logger类、LogStream类、LogFile类封装中的知识点
一、Logger类、LogStream类1、日志作用开发过程中:调试错误更好的理解程序运行过程中:诊断系统故障并处理记录系统运行状态2、日志级别TRACE指出比DEBUG粒度更细的一些信息事件(开发过程中使用)DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中原创 2013-11-02 20:45:06 · 5563 阅读 · 0 评论 -
muduo网络库学习之ThreadLocal<T> 类、ThreadLocalSingleton<T>类封装知识点
1、在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。2、在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。3、但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。4、POSIX线程库通过维护一定的数据结构来解决这个问题,这些数据称为(Thread-specific Data,或 TSD)。原创 2013-11-01 21:54:34 · 4460 阅读 · 3 评论 -
muduo网络库学习之BlockinngQueue<T>类、ThreadPool 类、Singleton类封装中的知识点
一、BlockinngQueue类、BoundedBlockingQueue类生产者消费者问题,可以用信号量+互斥锁 或者 条件变量+互斥锁 来解决,还分为有界和无界缓冲区两种情形,如下图:有界缓冲区:生产者:信号量+互斥锁:1,2,3,4,5条件变量+互斥锁:2,1,3,5,4(框框)消费者:信号量+互斥锁:1,2,3,原创 2013-11-01 19:14:40 · 3335 阅读 · 0 评论 -
muduo网络库学习之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点
一、MutexLock 类class MutexLock : boost::noncopyable二、MutexLockGuard类class MutexLockGuard : boost::noncopyable三、Condition类class Condition : boost::noncopyable某个线原创 2013-10-31 19:47:28 · 3769 阅读 · 0 评论 -
muduo网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())
一、Exception类封装class Exception : public std::exception #include int backtrace(void **buffer, int size); // backtrace 栈回溯,保存各个栈帧的地址 char **backtrace_symbols(void *const *buffe原创 2013-10-29 21:23:37 · 3263 阅读 · 0 评论 -
muduo网络库学习之Timestamp类、AtomicIntegerT 类封装中的知识点
一、Timestamp类封装class Timestamp : public muduo::copyable, public boost::less_than_comparable类图如下:值语义:可以拷贝,拷贝之后,与原对象脱离关系对象语义:要么是不能拷贝;要么可以拷贝,拷贝之后与原对象仍然存在一定的关系,比如共享底层原创 2013-10-24 19:27:50 · 3930 阅读 · 0 评论 -
面向对象编程风格 VS 基于对象编程风格(boost::bind/function)
本文主要通过实现Thread 类来展现两种编程风格的不同点。很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。现在的很多流原创 2013-10-22 11:34:04 · 5614 阅读 · 7 评论 -
浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用
在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,write 也不会一直阻塞。但实际上poll IO复用经常是跟非阻塞IO一起使用的,想想如果现在接收缓冲区一点数据没有,read 阻塞了,或者发送缓冲区不够空间存放数据,write 阻塞了,那整个事件循环就会延迟响应,比如现在又有一个新连原创 2013-10-09 23:48:14 · 10937 阅读 · 1 评论 -
大型网站架构演变过程、大并发服务器架构
大型网站架构演变过程:[Step1]web server与数据库分离web动静资源分离静态请求:如html, js, css, img动态请求:如jsp, php[Step2]缓存处理客户端(浏览器)缓存前端页面缓存(squid)页面片段缓存ESI(Edge Side Includes)原创 2013-11-14 12:39:06 · 9387 阅读 · 20 评论