服务器设计笔记(5)-----守护进程

简介:

守护进程的定义:

       通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。这事百科对此的解释,在游戏服务器里面也有守护进程,特点大概也类似。

游戏守护进程的定义:

       游戏服务器里面的守护进程大概完成的职责有这些。1,负责多个进程的启动;2,在进程挂掉的时候负责启动相应的进程;3,可以查询程序运行的情况等等。

游戏守护进程的原理:

      设计守护进程为父进程,验证进程,聊天进程,场景进程为子进程。在程序启动的时候,守护进程首先启动,然后根据不同的参数,启动不同的进程(fork),待所有的进程启动完毕,守护进程阻塞(wait),等待知道某一个子进程异常退出。父进程根据获取到的退出进程的id,查询到到退出的进程是验证进程还是聊天进程或者是场景进程,再次启动相应的进程,再次wait,循环....

部分代码分享:

头文件:


class GameDeamon
{
public:
    
       //守护进程类为单例模式,并且鄙视一下那些写个单例模式都要考虑多线程的人
    static GameDeamon* instance();

    static GameDeamon* _instance;

    virtual ~GameDeamon();
       
        //根据启动参数,启动不同的子进程 
    int analysis_argumen(int argc,char** argv);

       //根据不同的type,启动不同的进程
    int active_server(const int type);

       //父进程阻塞,直到有进程异常退出
    int wait_ex();
       
       //根据不同的type,开启不同的资源
    int spawn(const int type);

private:

    GameDeamon();
    //绑定不同的进程id,到不同的进程type
    std::map<int,int> _deamon_map;

};

实现文件:


static const int SERVICE_AUTH = 0;
static const int SERVICE_CHAT = 1;
static const int SERVICE_ENGINE = 2;

GameDeamon* GameDeamon::_instance;

GameDeamon* GameDeamon::instance()
{
    if(_instance == NULL)
    {
        _instance = new GameDeamon();
    }
    return _instance;
}


INT GameDeamon::active_server(const int type)
{
    pid_t _pid;
    _pid = fork();

    if(_pid < 0)
    {
        //error
    }
    else if(_pid == 0)
    {
        //child process
        this->spawn(type);
    }
    else
    {
        //parent process
        sleep(1);
        _deamon_map[_pid] = type;
    }

    return 0;
}

INT GameDeamon::wait_ex()
{
    pid_t pid;
    int log;
    pid = wait(&log);

    this->active_server(this->_deamon_map[pid]);

    return this->wait_ex();
}


INT GameDeamon::spawn(const int type)
{
  if(type == SERVICE_AUTH)
	  {
      //开启相应的资源
   }
   //.......
  return 0;
}

扩展:

      添加信号分析程序,以便查询进程的运行状态

欢迎提出宝贵意见!!!


相关文章
|
9月前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
6月前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
6月前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
8月前
|
算法 Linux 编译器
技术笔记:LINUX2.6.32下的进程分析
技术笔记:LINUX2.6.32下的进程分析
41 0
|
4月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
101 1
|
6月前
|
运维 算法 调度
深入理解操作系统:进程调度与优先级自动化运维:使用Ansible实现服务器集群管理
【8月更文挑战第27天】在操作系统的众多奥秘中,进程调度无疑是一个既简单又复杂的主题。它就像是交响乐团中的指挥,协调着每一个音符,确保乐曲和谐而有序地进行。本文将带领读者走进进程调度的世界,探索其背后的原理和实现,同时通过代码示例揭示其精妙之处。让我们一起揭开进程调度的神秘面纱,理解它在操作系统中的重要性。
|
6月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
6月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上
|
6月前
|
存储 Linux API
Linux源码阅读笔记08-进程调度API系统调用案例分析
Linux源码阅读笔记08-进程调度API系统调用案例分析
|
6月前
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数

热门文章

最新文章