异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门
.
异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门
本文来自异数OS社区
github: https://github.com/yds086/HereticOS
异数OS社区QQ群: 652455784
异数OS-织梦师(消息中间件 ,游戏开发方向)群: 476260389
异数OS-织梦师-Xnign(Nginx方向)群: 859548384
- 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门
- 本文来自异数OS社区
- 什么是异数OS微服务
- 异数OS微服务怎么写
- 微服务的组成接口介绍
- 未来计划
什么是异数OS微服务
异数OS在做容器化改造后提供了容器多服务实例能力,以此提供多租户多用户的使用环境,未来异数OS的系统组件以及用户应用组件都以微服务的形式来设计实现,比如文件系统,自定义tcp协议栈等。用户可以考虑在异数OS闭源授权协议下编写自己的服务产品来集成到异数OS平台,因此本文介绍用户如何编写微服务。
异数OS微服务怎么写
异数OS是高性能操作系统,高性能的程序是不能随便写的,还是需要注意一些事项,目前只提供C++的微服务写法,未来可能的话也可能会提供php js等扩展。
下面是Xnign服务的代码案例,完整代码请去社区寻共享翻阅
class XnignService : public HereticThread<XnignService>
{
public:XnignService() {};~XnignService() {};ULONGLONG nWaitTime;XnignStatisticsInfo m_OwnInfo;HereticEvent<int, true> m_WaitEvent;struct XnignState{unsigned int bNeedClose : 1; //系统请求关闭服务unsigned int bCanClose : 1; //表示服务目前可以关闭unsigned int bClosed : 1; //表示服务目前已关闭unsigned int bNeedEntryPower : 1; //系统请求进入目标电源状态unsigned int nNeedEntryPower : 2; //表示系统当前请求的电源状态unsigned int nCanEntryPower : 2; //表示服务目前可以进入的最低电源状态};unsigned int m_nServiceID;XnignState m_XnignState;bool Input(const char * pszInput) {ContainerThreadError(_T("XnignService-%d Input %s"), m_nServiceID, pszInput);return true;};bool PowerEntry(SystemPowerState & State) {/*enum SystemPowerState{PowerState_S0 = 1, // 高性能全速PowerState_S1, // IDLE低负载PowerState_S2, // RAM驻留,任务调度暂停PowerState_S3 // 关机,需要做数据持久化};*/switch (State){case SystemPowerState::PowerState_S0:break;case SystemPowerState::PowerState_S1:break;case SystemPowerState::PowerState_S2:break;case SystemPowerState::PowerState_S3:break;}m_XnignState.bNeedEntryPower = 1;m_XnignState.nNeedEntryPower = State;if (m_XnignState.nCanEntryPower > State){return true;}return false;};bool StartService(unsigned int nServiceID,const char * pszCommand) {bool bOk=BindTcpServerByContainerThread(HttpCacheStubThreadT::TcpRpcServerT, 79,this);if(bOk)BindTcpServerByContainerThread(HttpServer::TcpSocketT, 80,this);ContainerThreadError(_T("XnignService-%d StartService %s %s"), nServiceID, pszCommand,(bOk)?_T("OK"):_T("Fail"));if (bOk == false){m_XnignState.bNeedClose = true;m_WaitEvent.SetEvent();}m_nServiceID = nServiceID;memset(&m_OwnInfo, 0, sizeof(m_OwnInfo));return bOk;};bool StopService() {ContainerThreadError(_T("XnignService-%d StopService "), m_nServiceID);return true;};bool CloseService() {ContainerThreadError(_T("XnignService-%d CloseService bCanClose=%d"), m_nServiceID, m_XnignState.bCanClose);if (m_XnignState.bCanClose){return true;}UnBindTcpServerByContainerThread(HttpCacheStubThreadT::TcpRpcServerT, 79, this);UnBindTcpServerByContainerThread(HttpServer::TcpSocketT, 80, this);m_XnignState.bNeedClose = 1;m_WaitEvent.SetEvent();return false;};void Init() {nWaitTime = ::GetTickCount64();memset(&m_XnignState, 0, sizeof(m_XnignState));};void Close() {ContainerThreadError(_T("XnignService-%d Thread Close "), m_nServiceID);};void Loop(void * pContext = NULL);
private:};
OPTIMIZE_OFF
void XnignService::Loop(void * pContext)
{USING_HERETICOS_THREAD;ContainerThreadError(_T("XnignService begin..."));for (;;){XOS_Wait(m_WaitEvent);if (m_XnignState.bNeedClose){for (;;){if (m_OwnInfo.g_nCurrentServerLinkCount == 0){m_XnignState.bCanClose = 1;//系统可以关闭服务了break;}XOS_Sleep_Name(_WaitHttpServerClose, 100);}}}ContainerThreadError(_T("XnignService exit..."));ExitThread();
}
OPTIMIZE_OFF_END
微服务的组成接口介绍
1.成为一个异数OS线程
建一个类Test,public HereticThread,然后实现线程需要的3个接口init close loop.
2.实现微服务接口
bool StartService(unsigned int nServiceID,const char * pszCommand),用户启动服务是调用
bool CloseService(),用户关闭服务是调用
bool PowerEntry(SystemPowerState & State) 用户关闭系统或者系统电源状态发生改变是请求服务是否能进入目标状态,如果不能进入目标状态则返回false ,系统会再下一个电源周期再次请求进入,用户需要自己实现一个服务状态机来交互式响应系统电源状态以满足需求,比如关机数据持久化等能力。
bool Input(const char * pszInput) 服务运行后,用户可以对服务输入运行时命令,服务通过该接口响应用户输入的命令。
3.微服务的注册,填充如下结构体,标明服务名,类实例,版权信息,启动类型(系统自启,容器自启,单例)
struct ServiceInfo
{ServiceFactoryInterface * pServiceFactory;unsigned int nServiceType;char * pszServiceName;char * pszServiceDesc;char * pszServiceVer;char * pszAuthor;char * pszCopyright;char * pszHelp;
};#define SERVICE_TYPE_NONE 0x0 //默认启动类型,用户手动启动,可多例启动
#define SERVICE_TYPE_SYSTEM_ROOT 0x1 //系统启动时自启
#define SERVICE_TYPE_CONTAINER_ROOT 0x2 //容器启动时自启
#define SERVICE_TYPE_CONTAINER_SINGLE_INSTANCE 0x4 //单例启动(每容器)
#define SERVICE_TYPE_SYSTEM_SINGLE_INSTANCE 0x8 //单例启动(每系统)定义一个ServiceInfo服务注册信息结构
{ &ServiceFactory<XnignService>::GetInstance(),SERVICE_TYPE_CONTAINER_ROOT,"Xnign","织梦师-Xnign http server.","0.1","往事","HereticOS,往事",""
}
未来计划
目前由于没有做文件系统,因此没有完整的实现容器镜像功能,后面会实现虚拟容器概念,来将镜像动态分配类运行时的物理容器。
异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门相关推荐
- 异数OS 织梦师-水母(一)--消息队列篇 1
异数OS 织梦师-水母(一)–消息队列篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 异数O ...
- 微服务和分布式的区别_大话中台三:中台的搭建,分布式与微服务
关于中心化和去中心化的问题,已经是老生常谈了.中心化的优缺点都很明确,优点就是容易部署.容易维护,在服务压力较稳定的情况下,是成本最低的解决方案.缺点也是很显然,功能复杂之后管理困难,冲突频繁,性能不 ...
- 离线数仓(三)数仓建模基本理论
1.建模目标 数据模型就是数据组织和存储方法,它强调从业务.数据存取和使用角度合理存储数据.Linux的创始人Torvalds有一段关于"什么才是优秀程序员"的话:"烂程 ...
- 千亿数仓第三章(数仓理论_项目环境初始化)
项目环境初始化 3.1 Hive分层说明 分库存放 ods层 dw层 ads层 命名规则 ods层表与原始数据库表名称相同 dw层表 ofact_前缀表示事实表 odim_前缀表示维度表 ...
- 大三后端暑期实习面经总结——SSM微服务框架篇
博主现在大三在读,从三月开始找暑期实习,暑假准备去tx实习啦!总结下了很多面试真题,希望能帮助正在找工作的大家!相关参考都会标注原文链接,尊重原创! 目录 1. mvc.mvp.mvvm MVC架构 ...
- 网络营销第三课:利用织梦搭建动态网站(2)
上次讲了如何安装织梦,今天我给大家介绍如何利用默认的模板制作网页. 1.进入网站后台: 在ie中输入:http://localhost/dede进入网站后台,用户名和密码默认都为admin.如下图: ...
- 异数OS-织梦师-管仲(八) 并发危机解决之道
异数OS-织梦师-管仲(八) 并发危机解决之道 文章目录 异数OS-织梦师-管仲(八) 并发危机解决之道 前言 管仲佐纠 <管子>专用申明 解不开的并发障碍 Redis的并发障碍 MapR ...
- 数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
文章目录 一.前言 二.数仓建模 三.数仓分层 四.数仓的基本特征 五.数据仓库用途 六.数仓分层的好处 七.如何分层 一.前言 现在说数仓,更多的会和数据平台或者基础架构搭上,已经融合到整个基础设施 ...
- 京解之才——2019年技术盘点微服务篇(三)| 程序员硬核评测
戳蓝字"CSDN云计算"关注我们哦! 程序员硬核测评:客观.高效.不说软话.无论是技术质量.性能水平,还是工具筛选,一测便知! 过去几年来,"微服务架构"方兴未 ...
- 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地...
. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地 本文来自异数OS社区 github: https://github.com/yds086/Here ...
最新文章
- 支持向量机算法原理简介
- 【C++】 保存内容到文件工具
- 用数据说话——IOPS:RAID1+0 RAID5
- Stanford UFLDL教程 稀疏编码
- python简单的爬虫教程中召唤小海龟_Python练习,网络小爬虫(初级)
- Android 热修复 HotFix 混淆apk生成patch包方案
- MySQL的复制:MySQL系列之十三
- Python操作文件和目录
- 股票历史数据下载接口踩坑记录
- editor does not contain a main type的解决方案
- ImportError: No module named ‘Tkinter‘
- 结合CDIB类,对图像的打开、显示、保存
- 解决MacOS 下载的文件名字乱码问题
- Mmap的实现原理和应用
- python拆分PDF
- JPSE问题诊断指导四——hprof
- 乔治城大学计算机科学专业,[转载]美国西北大学计算机科学研究生最新专业排名...
- Android蓝牙系统框架和代码结构
- HTML学生个人网站作业设计:电影设计——爱影评在线电影(11页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- nvcc与nvidia
热门文章
- SitePoint播客#128:我最不喜欢的10岁
- 基于Unity3D的语音转文字功能的实现
- php怎么画五星红旗,php基于GD库画五星红旗的方法,phpgd库五星红旗_PHP教程
- 苹果电脑上好用的几款复制粘贴工具
- 多线程编程warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 错误解决
- Python为什么取名为Python,很少人知道
- delphi xe 10 程式外观
- 利用python爬取租房信息_Python实战:爬取租房信息
- 计算机科学中的哲学思想,冯·诺依曼的计算机科学哲学思想
- qpython 3h下载_【分享】QPython 3H3.0.0 一个伟大的脚本编辑器!