Muduo Net Library
文章平均质量分 80
laohan_
贵在坚持
展开
-
日志Logger 2( 21)
LoggerLogStream类图FixedBuffer类图Logger类图Impl类图LogStream的测试程序1 logstream_test.cc#include #include #include //#define BOOST_TEST_MODULE Lo原创 2013-11-07 09:16:40 · 1156 阅读 · 0 评论 -
EpollPoller --- muduo_net库源码分析(27)
EpollPoller的头文件epollpller.h// Copyright 2010, Shuo Chen. All rights reserved.// http://code.google.com/p/muduo///// Use of this source code is governed by a BSD-style license// that can be原创 2013-11-07 09:21:37 · 1571 阅读 · 0 评论 -
EventLoop再分析之IO线程(29)
EventLoop IO 线程的简单描述进程(线程)wait/notifypipesocketpaireventfdeventfd 是一个比 pipe 更高效的线程间事件通知机制,一方面它比 pipe 少用一个 file descripor,节省了资源;另一方面,eventfd 的缓冲区管理也简单得多,全部“buffer” 只有定原创 2013-11-07 09:22:12 · 5980 阅读 · 0 评论 -
文件描述符的分析(35-2)
代码#include #include #include #include #include using namespace muduo;using namespace muduo::net;class TestServer{ public: TestServer(EventLoop* loop, const InetAddress& l原创 2013-11-08 10:52:16 · 946 阅读 · 0 评论 -
BUFFER 之一(36)
应用层缓冲区Buffer设计为什么需要有应用层缓冲区(详见MuduoManual.pdf P76)Buffer结构epoll使用LT模式的原因与poll兼容LT模式不会发生漏掉事件的BUG,但POLLOUT事件不能一开始就关注,否则会出现busy loop,而应该在write无法完全写入内核缓冲区的时候才关注,将未写入内核缓冲区的数据添加到应用层outpu原创 2013-11-08 10:53:05 · 1436 阅读 · 0 评论 -
BUFFER之二(37)
应用程序想关闭连接,但是可能正处于发送数据的过程中,output buffer中有数据还没有发送完不能直接调用closeconn->send(buff)conn->shutdown()POLLOUT事件关闭写的这一半连接状态更改为kDisconnection,并没有关闭连接服务器主动断开与客户端的连接这意味着 客户端 read返回0close(con原创 2013-11-08 10:55:09 · 1000 阅读 · 0 评论 -
完善TcpConnection(38)
完善TcpConnectionWriteCompleteCallback含义HighWaterMarkCallback含义boost::any context_signal(SIGPIPE, SIG_IGN) // 请看channel class可变类型解决方案void*. 这种方法不是类型安全的boost::anyboost::any任意类型的类型安全存储以及原创 2013-11-08 10:55:38 · 2126 阅读 · 0 评论 -
TcpClient connector(39)
muduo库对编写tcp客户端程序的支持Connector // 主动发起连接TcpClient // 包含了一个Connector对象测试程序Reactor_test11.cc // echo serverTcpClient_test.cc // echo clientTcpClient 头文件TcpCl原创 2013-11-08 10:55:55 · 1683 阅读 · 0 评论 -
http实现源码(40-1)
HttpRequest头文件(包含实现)HttpResquest.h// Copyright 2010, Shuo Chen. All rights reserved.// http://code.google.com/p/muduo///// Use of this source code is governed by a BSD-style license// that ca原创 2013-11-08 10:56:44 · 2991 阅读 · 0 评论 -
muduo_inspect库源码分析(41)
muduo_inspect库通过HTTP方式为服务器提供监控接口接受了多少个TCP连接当前有多少个活动连接一共响应了多少次请求每次请求的平均响应时间多少毫秒。。。Inspector // 包含了一个HttpServer对象ProcessInspector // 通过ProcessInfo返回进程信息ProcessInfo // 获取进程相关信息原创 2013-11-08 10:56:58 · 1693 阅读 · 0 评论 -
文件传输服务器(43)
文件传输(MuduoManual.pdf P57)examples/filetransfer/download.ccexamples/filetransfer/download2.ccexamples/filetransfer/download3.cctests/Filetransfer_test.cc单线程模式之一次性发完一个文件#includ原创 2013-11-08 10:57:20 · 1622 阅读 · 0 评论 -
muduo_net库源码分析(26-1
Channel是selectable IO channel,负责注册与响应IO 事件,它不拥有file descriptor。Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection的成员,生命期由后者控制。时序图EventLoop头文件eventl原创 2013-11-07 09:21:10 · 2146 阅读 · 4 评论 -
多线程与并发服务器设计(23-1)
常见并发服务器方案1、循环式/迭代式( iterative )服务器 无法充分利用多核CPU,不适合执行时间较长的服务2、并发式(concurrent)服务器one connection per process/one connection per thread 适合执行时间比较长的服务3、prefork or pre threaded(UNP2e 第27章)原创 2013-11-07 09:19:41 · 2043 阅读 · 0 评论 -
TcpServerTcpConnection(34)
Acceptor类的主要功能是socket、bind、listen一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员TcpServer还包含了一个TcpConnection列表TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与Channel时序图原创 2013-11-07 09:24:20 · 2046 阅读 · 0 评论 -
日志(20)
日志流程TRACE指出比DEBUG粒度更细的一些信息事件(开发过程中使用)DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)INFO表明消息在粗粒度级别上突出强调应用程序的运行过程。WARN系统能正常运行,但可能会出现潜在错误的情形。ERROR指出虽然发生错误事件,但仍然不影响系统的继续运行。FATAL指出每个严原创 2013-11-07 09:15:12 · 1058 阅读 · 0 评论 -
traits 技术(21)
//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met://// * Redistributions of source code mu转载 2013-11-07 09:18:08 · 991 阅读 · 0 评论 -
muduo_net库源码分析(25)
TCP网络编程本质 TCP网络编程最本质是的处理三个半事件 连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接 连接断开:主动断开(close、shutdown),被动断开(read返回0) 消息到达:文件描述符可读 消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的原创 2013-11-07 09:20:06 · 2312 阅读 · 0 评论 -
Socket封装(31)
Endian.h封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。SocketsOps.h/ SocketsOps.cc封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。Socket.h/Socket.cc(Socket类)用RAII方法封装socket file descriptor原创 2013-11-07 09:23:02 · 2072 阅读 · 0 评论 -
Acceptor (32)
Acceptor用于accept(2)接受TCP连接Acceptor的数据成员包括Socket、Channel,Acceptor的socket是listening socket(即server socket)。Channel用于观察此socket的readable事件,并回调Accptor::handleRead(),后者调用accept(2)来接受新连接,并回调用户callback。原创 2013-11-07 09:24:02 · 1476 阅读 · 0 评论 -
LogFile (22)
日志滚动 日志滚动条件 1、文件大小(例如每写满1G换下一个文件) 2、时间(每天零点新建一个日志文件,不论前一个文件是否写满) 一个典型的日志文件名 logfile_test.20130411-115604.popo.7743.logLogger 类图File类图原创 2013-11-07 09:18:10 · 1277 阅读 · 0 评论 -
多线程与并发服务器设计(23 - 2 )
异步I/O常见并发服务器方案Linux能同时启动多少个线程? 对于 32-bit Linux,一个进程的地址空间是 4G,其中用户态能访问 3G 左右,而一个线程的默认栈 (stack) 大小是 10M,心算可知,一个进程大约最多能同时启动 300 个线程左右。多线程能提高并发度吗? 如果指的是“并发连接数”,不能。原创 2013-11-07 09:20:17 · 1096 阅读 · 0 评论 -
EventLoopThread (30)
任何一个线程,只要创建并运行了EventLoop,都称之为IO线程IO线程不一定是主线程muduo并发模型one loop per thread + threadpool为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程EventLoopThread创建了一个线程在线程函数中创建了一个EvenLoop对象并调用EventLoop::loop原创 2013-11-07 09:22:29 · 1499 阅读 · 0 评论 -
multiple reactors(35 -1 )
muduo库如何支持多线程EventLoopThread(IO线程类)EventLoopThreadPool(IO线程池类)IO线程池的功能是开启若干个IO线程,并让这些IO线程处于事件循环的状态下面的这些代码可能和前面给出的源代码有些不一样,阅读的同学请注意了EventLoopThreadPool头文件eventloopthreadpool.h// C原创 2013-11-07 09:25:09 · 1874 阅读 · 0 评论 -
http 简单描述 (40)
http requestrequest line + header + body (header分为普通报头,请求报头与实体报头)header与body之间有一空行(CRLF)请求方法有:Get, Post, Head, Put, Delete等协议版本1.0、1.1常用请求头Accept:浏览器可接受的媒体(MIME)类型;Accept-Languag原创 2013-11-08 10:56:12 · 948 阅读 · 0 评论