当前位置: 首页 > news >正文

深圳移动网站建设制作公司网站维护主要做哪些

深圳移动网站建设制作公司,网站维护主要做哪些,成都网站制作公司 dedecms,软件开发技术文档重写Sylar基于协程的服务器#xff08;1、日志模块的架构#xff09; 重写Sylar基于协程的服务器系列#xff1a; 重写Sylar基于协程的服务器#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar#xff09; 重写Sylar基于协程的服务器#xff08;1、日志模…重写Sylar基于协程的服务器1、日志模块的架构 重写Sylar基于协程的服务器系列 重写Sylar基于协程的服务器0、搭建开发环境以及项目框架 || 下载编译简化版Sylar 重写Sylar基于协程的服务器1、日志模块的架构 重写Sylar基于协程的服务器2、配置模块的设计 重写Sylar基于协程的服务器3、协程模块的设计 前言 和Muduo的日志对比Muduo的同步日志虽然格式固定但简单高性能。而sylar的日志设计的显得过于冗余虽然灵活性强、扩展性高但是性能却不及Muduo。尽管陈硕大大也说过简单才能保证高性能日志就没必要设计的那么花里胡哨但是sylar对日志的设计思想以及设计模式超级超级适合小白去学习。 日志格式 由于用户可能并不需要将日志上下文的每一项都进行输出而是希望可以自由地选择要输出的日志项。并且用户还可能需要在每条日志里增加一些指定的字符比如在文件名和行号之间加上一个冒号的情况。为了实现这项功能LogFormatter使用了一个模板字符串来指定格式化的方式。模板字符串由普通字符和占位字符构成。在构造LogFormatter对象时会指定一串模板字符LogFormatter会首先解析该模板字符串将其中的占位符和普通字符解析出来。在格式化日志上下文时根据模板字符串将其中的占位符替换成日志上下文的具体内容普通字符保持不变。下表是支持的占位符的含义。 占位符含义%s普通字符串直接输出的字符串%d时间%t线程真实id%N线程名%f协程id%p日志级别%c日志器名%F文件路径%l行号%m日志消息%TTab缩进%n换行 以%d{%Y-%m-%d %H:%M:%S}%T%t%T%N%T%f%T[%p]%T[%c]%T%F:%l%T%m%n格式串为例输出效果如图下 时间占位符%d需要带有格式化参数%Y-%m-%d %H:%M:%S这使得日志格式器能对日志上下文收集到的时间戳进行格式化而对于其他占位符日志格式器只需要从日志上下文中取来做简单的处理再直接拼接即可。 日志模块架构设计 sylar实现的日志中一条日志数据流向是日志包装器-日志器-数个日志输出地如图所示。 关于这几个类的设计如下 LogEvent: 日志上下文用于记录日志现场比如该日志的时间文件路径/行号日志级别线程/协程号日志消息等。 LogEventWrap: 日志事件包装类其实就是将日志事件和日志器一起包装到日志上下文中因为一条日志只会在一个日志器上进行输出。将日志事件和日志器包装到一起后方便通过宏定义来简化日志模块的使用这点和Muduo很像。另外LogEventWrap还负责在构建时指定日志事件和日志器在析构时调用日志器的log方法将日志事件进行输出。 Logger: 日志器负责进行日志输出。一个Logger包含多个LogAppender和一个日志级别提供log方法传入日志事件如果日志事件的级别高于日志器本身的级别就调用每一个LogAppender的log方法将日志进行输出否则该日志被抛弃。 日志包装器以及日志器伪代码 LogAppender: 日志输出器用于将一个日志上下文输出到对应的输出地。该类内部包含一个LogFormatter成员和一个log方法日志事件先经过LogFormatter格式化后再输出到对应的输出地。从这个类可以派生出不同的输出器类型比如StdoutLogAppender和FileLogAppender分别表示终端和文件的日志输出器。 日志输出器伪代码 LogFormatter: 日志格式器用于格式化一个日志事件。该类构建时可以指定pattern并根据提供的pattern调用init()进行解析。提供format方法用于将日志事件格式化成字符串。 日志格式串的解析 void LogFormatter::init(){std::vectorstd::tuplestd::string, std::string res;int len m_pattern.length();//state -- 0 普通字符部分/日志修饰字符//state -- 1 格式化字符部分//state -- 2 格式化字符参数部分int pLt 0, pRt 0, state 0 ;//\0看成万能字符while(pRt len){if(state 0){//状态升级if(pRt len || m_pattern[pRt] %){if(pLt pRt){res.push_back(std::make_tuple(s, m_pattern.substr(pLt, pRt - pLt)));}state 1; //升级pLt pRt 1;}}else if(state 1){//状态还原 或 状态升级 //或 此时遇到非{非%非字母的字符则隐式代表格式化字符部分结束if(pRt len m_pattern[pRt] {){if(pLt pRt){res.push_back(std::make_tuple(m_pattern.substr(pLt, pRt - pLt), ));}else{//错误没有模式字符只有选项参数res.push_back(std::make_tuple(s, parse error empty format character : ));}state 2;pLt pRt 1;}else if(pRt len m_pattern[pRt] %){if(pLt pRt){res.push_back(std::make_tuple(m_pattern.substr(pLt, pRt - pLt), ));}state 0;pLt pRt;continue;}else if(pRt len || !isalpha(m_pattern[pRt])){if(pLt pRt){res.push_back(std::make_tuple(m_pattern.substr(pLt, pRt - pLt), ));}state 0;pLt pRt;}}else{ //state 2//状态还原//缺少}结尾\0默认为}if(pRt len || m_pattern[pRt] }){std::get1(res.back()) std::get1(res.back()) m_pattern.substr(pLt, pRt - pLt);state 0;pLt pRt 1;}}pRt;}// ... 省略不重要的部分}LogManager: 日志器管理类单例模式用于统一管理所有的日志器提供日志器的创建与获取方法。LogManager自带一个root Logger用于为日志模块提供一个初始可用的日志器。 简化日志使用的宏定义 日志宏 #define LUNAR_LOG_LEVEL(logger, level) \if((logger)-getLevel() level) \(lunar::LogEventWrap(lunar::LogEvent::ptr(new lunar::LogEvent(__FILE__, __LINE__,\lunar::GetElapse(), lunar::Thread::GetTid(),\lunar::GetFiberId(), ::time(nullptr),\lunar::Thread::GetName(), level, (logger))))).getMsg()#define LUNAR_LOG_DEBUG(logger) LUNAR_LOG_LEVEL(logger, lunar::LogLevel::Level::DEBUG)#define LUNAR_LOG_INFO(logger) LUNAR_LOG_LEVEL(logger, lunar::LogLevel::Level::INFO)#define LUNAR_LOG_WRONG(logger) LUNAR_LOG_LEVEL(logger, lunar::LogLevel::Level::WRONG)#define LUNAR_LOG_ERROR(logger) LUNAR_LOG_LEVEL(logger, lunar::LogLevel::Level::ERROR)#define LUNAR_LOG_FATAL(logger) LUNAR_LOG_LEVEL(logger, lunar::LogLevel::Level::FATAL)其他 关于异步日志 本着基于协程淡化线程的思想在sylar中要实现异步日志的前提是先要基于协程实现一个信号量然后通过继承LogAppender参考Muduo设计一个异步日志但是其后台是由一个协程进行落盘。 异步日志的实现涉及到后面的fiber、hook等模块本文简略带过。 异步日志和同步日志对比 优点缺点异步日志执行效率更高一般应用程序只用将日志输出到一块缓存中由另起的线程将缓存中的日志输出到磁盘上减少了系统的IO负担当系统崩溃时容易丢失内存中来不及写入的日志。日志本身的代码实现、调试更复杂同步日志事件发生就输出系统崩溃不会出现丢日志的情况日志输出顺序可控代码实现简单效率更低增加系统IO负担输出日志时会阻塞工作线程 感兴趣的同学可以阅读一下本文实现的源码https://github.com/LunarStore/lunar 本章完结
http://www.hkea.cn/news/14412924/

相关文章:

  • 网站怎么做交易深圳微信公众号
  • 网站分析 实例中建国能建设集团网站
  • 做网站一单能挣多少wordpress 图床插件
  • 电脑公司网站模板下载asp个人网站模板下载
  • 网站后台建设怎么进入360上网安全导航
  • wordpress dux 1.6杭州网站seo
  • 同一个网站买多家cdnwordpress建立数据库时出错
  • 安全中国asp.net网站开发项目实战培训班百度权重10的网站
  • 摄影网站开发背景怎么写营销网站更受用户欢迎的原因是
  • 品牌网站建设源码wordpress公众号文章分类
  • 免费1级做爰片在线观看 历史网站仿阿里云网站
  • 建设银行辽宁省分行网站万装网装修平台
  • 哪里做网站最便宜开封旅游网站建设网页推广
  • 手机建设网站制作顺义企业建站费用
  • 一些可以做翻译的网站网站后台访问权限设置
  • 贷款类的网站好做怎么做孝感房产网站建设
  • 做排名出租网站标小智在线logo免费设计
  • asp 做网站网站开发技术概况
  • 广元市建设局网站首页wordpress 分享到qq空间
  • 做百度手机网站快速排百度推广入口登录
  • 网站管理系统后台不能发布文章了专业优化网站建设
  • 环保主题静态网站江苏省网站建设哪家好
  • 学网站开发需要多长时间大连seo推广优化
  • 网站设置价格错误不愿意发货国外采购外贸交易平台
  • 公司邮箱怎么申请的哈尔滨seo优化公司多少钱
  • wordpress 创建相册山东济南seo优化
  • 有做门窗找活的网站吗中国建设建设工程造价管理协会网站
  • 山西旅游网站建设建立网站专栏
  • 衡水城乡建设局网站首页蛋糕店网站设计模板
  • 代理加盟微信网站建设上海闵行刚刚发生的