首页 > TAG信息列表 > Muduo
muduo Timer
简介 定时器功能由TimerId,Timer,TimerQueue实现,用户只能看到TimerId TimerQueue只暴露两个接口addTimer和cancel,addTimer供eventloop使用,会包装成runat,runafter,runevery 实现 TimerQueue需要快速找到已经到期的Timer,muduo使用std::map将Timer按到期时间先后排序,操作复杂度为O(logNMuduo库
MutexLock #include <boost/noncopyable.hpp> #include <thread> #include <assert.h> class MutexLock : boost::noncopyable { public: MutexLock():holder_(0){ pthread_mutex_init(&mutex_,NULL); } ~MutexLock(){ pmuduo源码分析之muduo简单运用
今天不先实现muduo项目,我们先来看下muduo库的基本使用,只有了解了如何用,才能在写代码的时候知道自己写的找个函数是干嘛的,实际上是怎么使用的这个函数。首先说简单点,就是定义一个Server,设置两个回调函数 // 回调连接相关的事件 void onConnection(const TcpConnectionPtr &conn); /muduo源码分析之TcpServer模块
这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1] 然后我们来看下muduo的整体架构[来源1] 首先muduo有一个主反应堆mainReactor以及几个子反应堆subReactor,其中子反应堆的个数由用户使用setThreadNum函数设置,mainReactomuduo笔记 时间戳类Timestamp
目录如何度量程序在某一时刻的时间?Linux中,如何获取这个时间呢?Timestamp类设计构造函数(ctor)对象有效性获得当前时间(时刻)时间换算对象交换获取时间戳获取可打印字符串辅助函数(非class member函数)单元测试小结 如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2022-02-26 23:muduo库net源码分析三(定时器)
让EventLoop 能够处理定时器事件 定时函数 用于让程序等待一段时间或安排计划任务: sleep alarm usleep nanosleep clock_nanosleep getitimer / setitimer timer_create / timer_settime / timer_gettime / timer_delete timerfd_create / timerfd_gettime / timerfd_settime 选muduo日志系统
日志级别 TRACE 指出比DEBUG粒度更细的一些信息事件(开发过程中使用)DEBUG 指出细粒度信息事件INFO 表明信息在粗粒度级别上突出强调应用程序的运行过程WARN 系统能正常运行,但可能会出现潜在的错误ERROR 指出虽然发生错误事件,但仍然不影响程序的继续运行FATAL 指出每个严重的C++练手小项目(基于muduo网络库+mysql+jsoncpp的简易HTTPWebServer用于网页显示数据库后台数据
基于muduo网络库+mysql+jsoncpp的简易HTTPWebServer 项目介绍背景介绍主要模块介绍1、基于muduo网络库的WebServer:2、HTTP协议栈3、JsonServer:4、SQLConnection5、main模块 实现过程1、确定如何实现一个HTTPWebServer2、手动实现HTTP协议栈3、结合HTTP协议栈与muduo网络库【muduo/base】线程
#前言 muduo库也封装了线程Thread类,线程池ThreadPool。以及线程辅助类ThreadData,在这一部分我们可以学到如何创建线程,如何回收线程,加深对进程和线程的理解,以及代码规范方面的提升。 Thread类 头文件代码(去除了和命名相关的成员变量和函数) class Thread : noncopyable {muduo网络库简介和编程示例
muduo网络库简介和编程示例 面向对象编程 风格 基于对象编程 风格 借助boost bind/function来实现基于对象的编程 trivial constructor :无用的构造函数 non-trivial constructor :有用的构造函数 library 库中类相对比较独立,我们编写应用的时候需muduo学习简单介绍
介绍 muduo 网络库,是陈硕大神发布在github上的一个c++项目。几乎没有引用第三方库,手动封装了系统api,非常适合不希望仅仅成为简单api调用员的programmer学习。使用cmake编译,同时可以顺便掌握cmake使用。总之我非常推荐后端程序员可以学习一下,尤其是c++程序员,无论是对底层muduo网络库base源码详细分析
1 muduo网络库的目录结构 /muduo$ tree ./ -L 2 ./ ├── BUILD.bazel ├── build.sh ├── ChangeLog ├── ChangeLog2 ├── CMakeLists.txt ├── contrib │?? ├── CMakeLists.txt │?? ├── hiredis │?? └── thrift ├── muduo ├── README └──muduo库的安装使用
今天开始了陈硕大大的《linux多线程服务端编程》之旅,进行muduo网络库的学习,这里主要记录一下在win11下WSL的ubuntu子系统中进行的muduo的安装。 首先,由于muduo是采用cmake作为build system,所以先要安装cmke,另外由于muduo依赖于Boost(核心库依赖TR1),所以Boost也一并安装了。 smuduo学习笔记:net部分之Http--HttpServer
前面【muduo学习笔记:net部分之Http–HttpRequest、HttpResponse 和 HttpContext】介绍了TCP数据数据Buffer承载的HTTP报文的解析,本文结合TcpServer,基于muduo实现一个简单的HttpServer。由于对协议解析不完善,它不适合写web的通用服务。 1、HttpServer的定义 有了TcpServer的muduo记录2:muduo EPollPoller源码学习
muduo EPollPoller源码学习 一 Channel怎么update到epollfd EPollPoller::update(),这个方法的层层调用关系: 假设acceptor或者TcpConnection对象刚刚创建,第一次调用了自己的channel成员的enableReading();channel因此更新表示关注事件的events_,然后update(); Channel::update()转而执muduo之Socket和SocketsOps
Socket.cc和SocketsOps.cc用来调用一个套接字设置选项和底层的socket API,也包括一些类型转换,记录一下,以后可以直接拿来用。 Socket.cc // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this source code ismuduo之TcpServer
TcpServer拥有Acceptor类,新连接到达时new TcpConnection后续客户端和TcpConnection类交互。TcpServer管理连接和启动线程池,用Acceptor接受连接。 // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this sourcmuduo中threadpool中一些理解
void threadPool_unittest() { threadPool pool("MainThreadPool"); pool.setMaxQueueSize(1); pool.start(5); pool.run(print); pool.run(print); for (int i = 0; i < 1000; ++i) { char buf[32]; snprintf(buf, sizeof buf, "task %d", i);(P26)muduo_base库源码分析
文章目录 1.muduo网络库的类图2.时序图 1.muduo网络库的类图 类图如下: 解释如下: 灰色是内部类,对外不可见; 白色是外部类,对外可见; EventLoop类 EventLoop是对事件循环的抽象; Poller类,PollPoller类,EPollPoller类 (1)下面的三个是muduo唯一使用面向对象编程思想的地方,下使用muduo网络库编译出现error: reference to ‘_1’ is ambiguous
某程序使用了muduo网络库,而编译时报错: 其实看编译报错原因就很明显了 std::placeholders::_1 和 boost库的extern const _Placeholder<1> _1 冲突了。 而用户代码并没有using namesapce std::placeholders 而是想使用boost::bind 如: #include <muduo/net/TcpServer.h> #include <muduo源码分析之TcpServer
相关文件 muduo/net/TcpServer.h muduo/net/TcpServer.cc 作用 使用 使用命令 nc 127.0.0.1 8888 作为客户端连接上开启的服务器 #include <muduo/net/TcpServer.h> #include <muduo/net/EventLoop.h> #include <muduo/net/InetAddress.h> #include <stdio.h> using namespacemuduo源码分析之Acceptor
相关文件 muduo/net/Acceptor.h muduo/net/Acceptor.cc //用RAII方法封装socket file descriptor muduo/net/Socket.h muduo/net/Socket.cc //封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中) muduo/net/SocketsOps.h muduo/net/SocketsOps.cc //封装了字节序muduo源码分析之Cannel通道
相关文件 muduo/net/Channel.h muduo/net/Channel.cc 作用 Channel可理解为一个文件描述符fd和如何处理它的事件的回调函数的封装。 Channel负责注册和响应IO事件。 muduo用户一般不直接使用Channel,而使用更上一层的封装,如TCPConnetion。 使用 这里是一个给出的测试示例 #includeMuduo源码Base篇
Muduo异步日志 先来看AsyncLogging类的定义 class AsyncLogging : noncopyable { public: AsyncLogging(const string& basename, off_t rollSize, int flushInterval = 3); ~AsyncLogging() { if (running_) { stop()muduo 库解析之十一:Thread
线程 创建线程 #include <pthread.h> int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,void *(*start_routine)(void*), void *restrict arg); 成功返回0,失败返回错误号。pthread 库的函数都是通过返回值返回错误号。 在一个线程中调用 pt