gf框架之平滑重启特性 - 功能强大灵活
文章来源:http://gf.johng.cn/625833 基本介绍平滑重启(热重启)是指Web Server在重启的时候不会中断已有请求的执行。该特性在不同的项目版本发布的时候特别有用,例如,当需要先后发布两个版本:A、B,那么在A执行的过程当中,我们可以将B的程序直接发布覆盖A的程序,并使用平滑重启特性无缝地将请求过渡到新版本的服务中。 需要注意的是,该特性仅限于 管理功能gf框架支持非常方便的Web管理功能,也就是说我们可以通过Web页面/接口直接进行Web Server的重启/关闭等管理操作。同时,gf框架也支持通过命令行终端指令(仅限 Web管理我们先来看一下Web Server中涉及到管理操作方法有哪些: func (s *Server) Reload() error func (s *Server) Restart() error func (s *Server) Shutdown() error func (s *Server) EnableAdmin(pattern ...string) 其中, 此外,gf框架提供了一个简便的管理方法 示例1:基本使用package main import ( "time" "gitee.com/johng/gf/g" "gitee.com/johng/gf/g/os/gproc" "gitee.com/johng/gf/g/net/ghttp" ) func main() { s := g.Server() s.BindHandler("/",func(r *ghttp.Request){ r.Response.Writeln("哈喽!") }) s.BindHandler("/pid",func(r *ghttp.Request){ r.Response.Writeln(gproc.Pid()) }) s.BindHandler("/sleep",func(r *ghttp.Request){ r.Response.Writeln(gproc.Pid()) time.Sleep(10*time.Second) r.Response.Writeln(gproc.Pid()) }) s.EnableAdmin() s.SetPort(8199) s.Run() } 我们通过以下几个步骤来测试平滑重启:
示例2:HTTPS支持package main import ( "gitee.com/johng/gf/g" "gitee.com/johng/gf/g/net/ghttp" ) func main() { s := g.Server() s.BindHandler("/",func(r *ghttp.Request){ r.Response.Writeln("哈罗!") }) s.EnableHTTPS("/home/john/temp/server.crt","/home/john/temp/server.key") s.EnableAdmin() s.SetPort(8200) s.Run() } gf框架的平滑重启特性对于HTTPS的支持也是相当友好和简便,操作步骤如下:
在命令行终端可以看到以下输出信息: 2018-05-18 11:13:05.554 17278: https server started listening on [:8200] 2018-05-18 11:13:21.270 17278: server reloading 2018-05-18 11:13:21.278 17319: https server reloaded listening on [:8200] 2018-05-18 11:13:34.895 17319: server shutting down 2018-05-18 11:13:34.895 17269: all servers shutdown 示例3:多服务及多端口gf框架的平滑重启特性相当强大及稳定,不仅仅支持单一服务单一端口监听管理,同时也支持多服务多端口等复杂场景的监听管理。 package main import ( "gitee.com/johng/gf/g" ) func main() { s1 := g.Server("s1") s1.EnableAdmin() s1.SetPort(8100,8200) s1.Start() s2 := g.Server("s2") s2.EnableAdmin() s2.SetPort(8300,8400) s2.Start() g.Wait() } 以上示例演示的是两个Web Server 2018-05-18 11:26:54.729 18111: http server started listening on [:8400] 2018-05-18 11:26:54.729 18111: http server started listening on [:8100] 2018-05-18 11:26:54.729 18111: http server started listening on [:8300] 2018-05-18 11:26:54.729 18111: http server started listening on [:8200] 2018-05-18 11:27:08.203 18111: server reloading 2018-05-18 11:27:08.207 18124: http server reloaded listening on [:8300] 2018-05-18 11:27:08.207 18124: http server reloaded listening on [:8400] 2018-05-18 11:27:08.207 18124: http server reloaded listening on [:8200] 2018-05-18 11:27:08.207 18124: http server reloaded listening on [:8100] 2018-05-18 11:27:19.379 18124: server shutting down 2018-05-18 11:27:19.380 18102: all servers shutdown 命令行管理gf框架除了提供Web方式的管理能力以外,也支持命令行方式来进行管理,由于命令行采用了信号量进行管理,因此仅支持 主进程与子进程gf框架的平滑重启特性是依靠多进程管理及进程间通信来实现的,因此Web Server程序执行后将会存在两个进程,并且有主/子进程之分。假如我们的Web Server程序名称叫做 $ ps aux | grep demo john 19557 0.1 0.1 282408 10676 ? Sl 11:53 0:00 /tmp/demo john 19566 0.0 0.1 356140 10688 ? Sl 11:53 0:00 /tmp/demo --gproc-child 其中,命令行带有 平滑重启使用 完整重启使用 关闭服务使用 其他管理方式由于gf框架的Web Server采用了单例设计,因此任何地方都可以通过 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |