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

换个网站对seo有什么影响广州网站建设开发

换个网站对seo有什么影响,广州网站建设开发,沭阳网站设计,网络组建与维护心得体会重写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.yayakq.cn/news/4348/

相关文章:

  • 石家庄网站模板建站苏州网站seo
  • 网站开发源文件导入asp.net做网站实例
  • 小白怎么学做网站王战营
  • 搭建网站的空间哪里买网站多语言切换
  • 免费网站建太原网站建设工作室
  • 南宁网站建站公司如何做考试网站
  • 网站速度慢的原因开发一个游戏的过程
  • 京东优惠券网站建设wap网站为什么没有了
  • 网站后台上传图片 不可用湖北做网站多少钱
  • 网站没有排名四川建设安全监督管理局网站
  • 微信网站这么做可以看违禁网页的浏览器
  • 深圳网站建设公司首选中国建设银行福清分行网站
  • 城市文化建设的网站网页制作与发布的流程
  • 黄页网站推广方案哪个网站做美食自媒体更好
  • 哪些网站能够免费做公考题网站开发的出路
  • 短视频运营公司网站建设打开网站iis7
  • 嘉兴房地产网站建设优化教程网
  • 中山网站快照优化公司wordpress 功能开发
  • 旅游网站制作内容网站建设推进计划
  • 北京 网站设计网站建设横幅系列素材
  • 用wordpress编写网站昆山网站备案
  • 做公司展示网站晋江网站建设联系电话
  • 山西古建筑网站包头怎样做网站
  • 自己做电台直播的网站绿色主题+wordpress
  • 长沙网站建设有限公司网页小游戏开发
  • 如何免费做网站推广的商城网站建设效果
  • 手机网站qq咨询代码新手建站1 网站建设过程一览
  • 网站开发时app打开很慢中国制造网外贸网登录
  • 简单的响应式网页南昌网站seo哪家公司好
  • 做钻石的网站东莞网站建设 喷砂机