sylar-0-概述
2 Apr 2024 •
Qiang Liu
sylar是一个高性能的服务器框架,本文对sylar的项目结构进行概述
简介
sylar是一个高性能的服务器框架,项目基于现代C++风格,采用模块化的开发,拥有完善的日志支持,有多线程多协程调度框架,采用hook机制将同步读写变成异步读写,并采用ragel对http协议进行解析,拥有很高的性能。本文对sylar的各个模块进行概述。
项目地址
概述
项目的框架图如下所示,大致分为6大模块,分别是日志模块、配置模块、任务调度模块、http解析模块、stream读写模块、网络模块。其中每个模块又分为多个子模块,如日志模块分为日志器(logger)、日志器管理器(loggerManager)、日志格式器(logFormatter)、日志输出器(logAppender)等。每个模块都有自己的功能,服务器框架各个模块之间通过组合的方式相互协作,共同完成服务器的功能。
日志模块:日志模块是整个服务器框架的基础模块,提供了日志的输出、格式化、管理等功能。
配置模块:配置模块提供了配置文件的解析、读取、管理等功能。采用观察者模式,在值发生变化时通知观察者。
任务调度模块:任务调度模块提供了任务的调度、执行、管理等功能。此模块是整个服务器框架的核心模块。任务调度模块分为了线程模块、协程模块、协程调度、IO协程调度、hook模块等。协程采用非对称协程设计方式,每个线程拥有一个主协程,协程之间的切换都要依靠主协程进行。任务的执行单元是协程,协程是一个轻量级的线程,协程的调度是通过协程调度器来完成的。在IO协程调度器中,封装了对epoll的操作,实现了对IO事件的监听、处理等功能。hook模块提供了对同步读写的hook,将同步读写变成异步读写,避免了协程的阻塞。
http解析模块:http解析模块提供了http协议的解析、处理等功能。采用ragel对http协议进行解析,并将解析的结果封装成httpRequest,httpResponse,uri对象,方便后续的处理。
stream读写模块:stream读写模块封装了对文件、socket等的读写操作。通过统一的读写接口,使其易于扩展。httpSession,httpConnection分别为上层提供了对http协议的读写接口,如读取/发送http请求、写入/获取http响应等。
网络模块:网络模块提供了网络通信的功能。使用底层模块提供的功能,如stream,任务调度等,封装了对socket的操作,如读、写、连接、关闭等。使用户更加容易开发出相应的网络应用。
sylar