从epoll构建muduo-1 mini-muduo介绍】的更多相关文章

mini-muduo版本传送门 version 0.00 从epoll构建muduo-1 mini-muduo介绍 version 0.01 从epoll构建muduo-2 最简单的epoll version 0.02 从epoll构建muduo-3 加入第一个类,顺便介绍reactor version 0.03 从epoll构建muduo-4 加入Channel version 0.04 从epoll构建muduo-5 加入Acceptor和TcpConnection version 0.05…
mini-muduo版本号传送门 version 0.00 从epoll构建muduo-1 mini-muduo介绍 version 0.01 从epoll构建muduo-2 最简单的epoll version 0.02 从epoll构建muduo-3 增加第一个类,顺便介绍Reactor version 0.03 从epoll构建muduo-4 增加Channel version 0.04 从epoll构建muduo-5 增加Acceptor和TcpConnection version 0.0…
mini-muduo版本号传送门 version 0.00 从epoll构建muduo-1 mini-muduo介绍 version 0.01 从epoll构建muduo-2 最简单的epoll version 0.02 从epoll构建muduo-3 增加第一个类.顺便介绍reactor version 0.03 从epoll构建muduo-4 增加Channel version 0.04 从epoll构建muduo-5 增加Acceptor和TcpConnection version 0.0…
https://blog.csdn.net/voidccc/article/details/8719752 ========== https://blog.csdn.net/liangzhao_jay/article/details/79656237 ====== https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665 ========== https://blog.csdn.net/kobejayandy/article…
Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Jenkins中Testcomplete插件安装 首先下载Jenkins中所需的testcomplete插件(Jenkins插件管理中也可以进行下载安装,但是为了找到最适合版本的插件我们采用先下载插件后安装的步骤) 下载地址:TestComplete support plug-in (选择1.4版本)…
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm inst…
转载地址:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp…
1.基本介绍 gulp.js是一个自动化构建工具,是自动化项目的构建利器.可以对网站的资源进行优化,将开发过程中一些重复的任务通过执行命令自动完成.这样能很大的提高我们的工作效率. gulp.js是基于Node.js构建的,利用Node.js流可以快速的构建项目,例如能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自动刷新.部署文件生成,并监听文件在改动后重复指定等. 2.自动化构建工具 gru…
原文链接:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易, 而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm i…
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm inst…
本文转自:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp…
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm inst…
http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的安装 首…
本文转载自:https://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gu…
转载至:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的…
业务场景 用户画像是对用户信息的标签化.用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌.通过用户画像系统,可以对各个用户进行精准定位,从而将其应用于个性化推荐.精准营销等业务场景中.用户画像系统已经被各个企业广泛采用,是大数据落地的重要方式之一. 在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大.用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案.当前主流的实现方案采用ElasticSearch方案.但基…
宏宏宏 由于 C++ 是静态语言,不能像 js 一样通过函数名字符串来直接执行函数,所以将 messageId 映射到可执行函数的复杂性大大提升:KBEngine 使用了一系列精巧的「宏」来解决这个问题. 为了叙述方便,我把需要通过 messageId 来映射执行的函数称为「协议函数」,以区分普通的函数. loginapp 的宏,统一在 loginapp_interface_macros.h 中声明,在 loginapp_interface.h 中使用.我把 loginapp_interface…
在我和用户的交流中发现,在任何类型和规模的组织中,每当涉及到在云中实现商业价值的最大化并取得竞争优势的时候,就会明显呈现三个趋势.首先,应用程序促进着组织更快速实现价值.同时,诸如机器学习.数据预测分析和物联网(IoT)等高级服务正在加速创新——这不仅帮助消费者重塑业务流,更能让他们去想象更多的可能.但这些并非意味着云架构不再重要.支撑云的基础架构依然是关键,它不仅要为消费者提供可靠安排和安全,也要帮助他们更快速的扩展和起点的提升. 在AzureCon上,我们将推出一系列助力用户的创新——帮助A…
cargo是Rust内置的项目管理工具.用于Rust 项目的创建.编译.执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级. 一.查看 cargo 版本号 安装Rust之后,能够使用 cargo --version 查看cargo的版本号信息. $ cargo --version cargo 0.8.0-nightly (28a0cbb 2016-01-17) 二.创建新项目 1.使用 " new 项目名称" 创建新项目 cargo new hel…
目录 前言 多线程TcpServer EventLoopThreadPool 线程池设计模式 muduo中的使用 连接的建立.消息.销毁 on_connection on_message on_close 简单透传服务实现 @ 前言 前面文章介绍了muduo网络库的单线程设计方式,即一个EventLoop 处理所有的事件,包括链接的建立.IO.计算.以及链接的销毁,本文介绍下muduo中的多线程设计方法. 多线程TcpServer EventLoopThreadPool 多线程的muduo::T…
muduo库的简单使用 muduo是一个基于事件驱动的非阻塞网络库,采用C++和Boost库编写. 它的使用方法很简单,参考这篇文章:TCP网络编程本质论 里面有这么几句: 我认为,TCP 网络编程最本质的是处理三个半事件: 连接的建立,包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接. 连接的断开,包括主动断开 (close 或 shutdown) 和被动断开 (read 返回 0). 消息到达,文件描述符可读.这是最为重要的一个事件,对它的处理方式决定了网络…
传统的Reactor通过控制select和poll的等待时间来实现定时,而现在在Linux中有了timerfd,我们可以用和处理IO事件相同的方式来处理定时,代码的一致性更好. 一.为什么选择timerfd 常见的定时函数有如下几种: sleep alarm usleep nanosleep clock_nanosleep getitimer / setitimer timer_create / timer_settime / timer_gettime / timer_delete timer…
muduo是一个高质量的Reactor网络库,采用one loop per thread + thread loop架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范. muduo的代码分为两部分,base和net,base部分实现一些基础功能,例如log, thread, threadpool, mutex, queue 等,这些基础模块在后面网络库中很多地方都可以复用, base库的类相互之间耦合性较低,源码阅读起来并不困难,此处不做过多探究. net部分使用base中的工具类实现更高…
Connector TcpClient Connector Connector用来发起连接. 在非堵塞网络中,主动发起连接比被动接收连接更为复杂,由于要考虑错误处理,还要考虑重试. 主要难点在于 1.socket是一次性的,一旦出错无法恢复.仅仅能关闭重来.使用新的fd后,用新的channel. 2.错误代码与acce(2)不同. 及时是socket可写.也不意味着已经成功建立连接.还须要用getsockopt(sockfd, SOL_SOCKET, SO_ERROR, --)再次确认. 3.重…
2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快.如果你还没有使用过前端构建工具,或者觉得gruntjs太难用的话,那就尝试一下gulp吧. 本文导航: gulp的安装 开始使用gulp gulp的API介绍 一些常用的gulp插件 1.gulp的安…
一.简介 Muduo(木铎)是基于 Reactor 模式的网络库. 二.安装 从github库下载源码安装:https://github.com/chenshuo/muduo muduo依赖了很多的库,所以在安装muduo之前应该安装这些库,包括:curl.c-ares.protobuf. 前面两个在centos6.2可以使用yum安装,protobuf只能源码安装了,参见这篇文章. yum install libcurl-devel yum install c-ares-devel 在mudu…
muduo的并发模型为one loop per thread+ threadpool.为了方便使用,muduo封装了EventLoop和Thread为EventLoopThread,为了方便使用线程池,又把EventLoopThread封装为EventLoopThreadPool. 所以这篇博文并没有涉及到新奇的技术.可是也有一些封装和逻辑方面的注意点须要我们去分析和理解. EventLoopThread 不论什么一个线程,仅仅要创建并执行了EventLoop,就是一个IO线程. EventLo…
使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,docker build命令会根据这些构建指令完成Docker镜像的构建.本文将会介绍Dockerfile文件,及其中使用的构建指令. Dockerfile文件使用 Dockerfile文件格式 Dockerfile中使用指令 3.1 FROM 3.2 RUN 3.3 CMD 3.4 ENTRYPOINT…
muduo库里面的实现日志滚动有两种条件,一种是日志文件大小达到预设值,另一种是时间到达超过当天.滚动日志类的文件是LogFile.cc ,LogFile.h 代码如下: LogFile.cc #include <muduo/base/LogFile.h> #include <muduo/base/Logging.h> // strerror_tl #include <muduo/base/ProcessInfo.h> #include <assert.h>…
muduo库里面的日志使方法如下 这里定义了一个宏 #define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) \ muduo::Logger(__FILE__, __LINE__).stream() 返回的stream重载了一系列的运算符,使用方法如下 LOG_INFO<<"info ..."; // 使用方式 上面那句其实就是 muduo::Logger(__FILE__, __LI…