Hyper 源码分析-----创建hyper daemon

本文深入分析hyper daemon的启动过程,包括flag参数解析、mainDaemon函数、engine初始化、NewDaemon创建以及server的构建。hyper daemon由server、engine和job组成,负责接收并处理客户端请求。在启动时,解析命令行参数,初始化配置,创建engine和daemon,注册handler,并建立http server等待客户端连接。通过对engine和daemon的结构分析,揭示了hyper daemon在hyper程序中的核心角色和任务转发机制。
摘要由CSDN通过智能技术生成

一、概述

hyper daemonhyper的后台守护进程,我们必须要通过输入hyperd命令先打开hyper daemon,然后才能执行hyper runhyper stop等一系列对于hyper虚拟机的操作命令。与hyper client不同的是,hyper daemon承担了整个hyper程序的大部分任务且主要由三部分组成:serverenginejob

其中server用于接收来自hyper client端的请求,然后将请求转发到engine中。engine则主要是路由的作用,通过一个handler对象将具体的请求分发到相应的job去执行。至于job则用于将任务转发的具体的函数去执行。其实从上面的叙述我们可以发现,这些任务的转发的确显得有点啰嗦,所以在dockerengjinejob这个两个概念已经被移除了。希望hyper在以后的代码重构时也能对这部分代码进行精简。下面我们就通过源码来观察hyper daemon的整个启动过程。

 

二、flag 参数解析

当你输入在shell中输入hyperd命令时,我们就进入hyperd.go文件中的main函数开始创建hyper daemon了!首先和hyper client中类似,我们需要对命令行参数进行解析。main函数中先是定义了三个flag参数flConfig,flHost,flHelp分别表示hyper daemon的配置信息,hostIP地址和端口号,以及是否输出帮助信息。当然,这些我们都没有,所以直接采用默认设置。接下来执行语句

mainDaemon(*flConfig, *flHost)正式进入hyper daemon的创建。

 

三、mainDaemon函数分析

因为我们并没有显式指定配置文件的地址,所以首先要做的就是指定默认的配置文件地址为/etc/hyper/config,其实里面指定的无非是hyper kernel,hyper initrd等等用于启动虚拟机的组件的地址而已。如果你想用自己的kernel启动虚拟机,可以试着修改里面的内容。

接下来是两条非常关键的语句,分别用于初始化enginedaemon 

eng := engine.New(config)

d, err := daemon.NewDaemon(eng)

因为它们都非常重要,所以在下面的小节中再进行详细的叙述。在初始化enginedaemon之后,通过err := d.Install(eng)函数将具体的方法注册到enginehandler中,其实做的不过就是初始化一个映射表map[string]engine.Handler而已。例如通过</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值