首页 > TAG信息列表 > muduo

muduo Timer

简介 定时器功能由TimerId,Timer,TimerQueue实现,用户只能看到TimerId TimerQueue只暴露两个接口addTimer和cancel,addTimer供eventloop使用,会包装成runat,runafter,runevery 实现 TimerQueue需要快速找到已经到期的Timer,muduo使用std::map将Timer按到期时间先后排序,操作复杂度为O(logN

Muduo库

MutexLock #include <boost/noncopyable.hpp> #include <thread> #include <assert.h> class MutexLock : boost::noncopyable { public: MutexLock():holder_(0){ pthread_mutex_init(&mutex_,NULL); } ~MutexLock(){ p

muduo源码分析之muduo简单运用

今天不先实现muduo项目,我们先来看下muduo库的基本使用,只有了解了如何用,才能在写代码的时候知道自己写的找个函数是干嘛的,实际上是怎么使用的这个函数。首先说简单点,就是定义一个Server,设置两个回调函数 // 回调连接相关的事件 void onConnection(const TcpConnectionPtr &conn); /

muduo源码分析之TcpServer模块

这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1] 然后我们来看下muduo的整体架构[来源1] 首先muduo有一个主反应堆mainReactor以及几个子反应堆subReactor,其中子反应堆的个数由用户使用setThreadNum函数设置,mainReacto

muduo笔记 时间戳类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也一并安装了。 s

muduo学习笔记: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 is

muduo之TcpServer

         TcpServer拥有Acceptor类,新连接到达时new TcpConnection后续客户端和TcpConnection类交互。TcpServer管理连接和启动线程池,用Acceptor接受连接。 // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this sourc

muduo中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 namespace

muduo源码分析之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。 使用 这里是一个给出的测试示例 #include

Muduo源码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