- Notifications
You must be signed in to change notification settings - Fork8
go 语言开发的服务器模板,可与 acl_master 服务器框架深度集成
License
acl-dev/go-service
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
go 语言开发的服务器模板,可与 acl_master 服务器框架深度集成。
go get -u github.com/acl-dev/go-service编写源码main.go 如下:
package mainimport ("flag""fmt""log""net""github.com/acl-dev/go-service")funconAccept(conn net.Conn) {buf:=make([]byte,8192)for {n,err:=conn.Read(buf)iferr!=nil {fmt.Println("read over",err)break }_,err=conn.Write(buf[0:n])iferr!=nil {fmt.Println("write wrror",err)break } }}funconClose(conn net.Conn) {log.Println("---client onClose---",conn.RemoteAddr())}var (listenAddrsstring)funcmain() {flag.StringVar(&listenAddrs,"listen","127.0.0.1:8080; 127.0.0.1:8081","listen addr in alone running")flag.Parse()master.Prepare()// Bind the given addresses from commandline or from master framework.service,err:=master.TcpServiceInit(listenAddrs)iferr!=nil {log.Println("Init tcp service error:",err)return }// Set callback when accepting one connection.service.AcceptHandler=onAccept// Set callback when closing one connection.service.CloseHandler=onClosefmt.Printf("listen: %s\r\n",listenAddrs)// Start the service in alone or daemon mode.service.Run()}
编译:
$ go build -o echod手工运行:
$ ./echod -alone该程序为一个简单的回显服务,运行后可以手工telneet 127.0.0.1 8080 进行测试。
首先需要从https://github.com/acl-dev/acl 或https://gitee.com/acl-dev/acl 下载 acl 工程,然后编译安装,过程如下:
#cd acl; make#cd disk/master; ./setup.sh /opt/soft/acl-master#cd /opt/soft/acl-master/sh; ./start.sh上面过程便完成了编译、安装及启动 acl_master 服务管理框架的过程。
如果您使用 CentOS 操作系统,还可以通过下面过程来完成(即:生成 acl_master RPM 包,然后安装该 RPM 包即可):
#cd packaging; make#cd x86_64; rpm -ivh acl-master*.rpm当 RPM 安装后 acl_master 服务管理程序会自动启动。
首先下载 go-service 软件包并编译其中的服务示例,然后安装这些服务程序:
#go get -u github.com/acl-dev/go-service#cd $GOPATH/src/github.com/acl-dev/go-service/examples/#(cd go-echod; go build; ./setup.sh /opt/soft/go-echod)#(cd go-httpd; go build; ./setup.sh /opt/soft/go-httpd)#(cd gin-server; go get; go build; ./setup.sh /opt/soft/gin-server)#/opt/soft/go-echod/bin/start.sh#/opt/soft/go-httpd/bin/start.sh#/opt/soft/gin-server/bin/start.sh通过启动脚本分别启动这几个服务例子,启动脚本实际上是通知acl_master 服务程序来启动这几个服务程序。
其中的示例 gin-server 是使用 gin 编写的一个简单的 Go web 服务。
最后运行acl_master 服务框架中的管理工具来查看由acl_master 管理的服务:
#/opt/soft/acl-master/bin/master_ctl -a list结果显示如下:
status service type proc owner conf 200 127.0.0.1|5001, 127.0.0.1|5002, echod.sock 4 1 root /opt/soft/go-echod/conf/go-echod.cf200 |8881, 127.0.0.1|8882, go-httpd.sock 4 2 nobody /opt/soft/go-httpd/conf/go-httpd.cf200 |87, |88, |89, gin-server.sock 4 2 nobody /opt/soft/gin-server/conf/gin-server.cf可以使用curl 工具测试一下 gin-server 服务,如下:
# curl http://127.0.0.1:88/testhello world!说明acl_master 服务管理程序已经管理了这几个 Go 写的服务进程。同时可以看到:
gin-server服务由acl_master启动了两个进程;gin-server可以同时多个 TCP 端口地址(其实是由acl_master是监听的,gin-server只是继承了这种监听行为);gin-server不仅可以监听 TCP 端口,还可同时监听 UNIX 域地址(这是由 acl_master 监听后传递给 gin-server 的);gin-server虽然监听的 TCP 端口 < 1024,但gin-server的运行身份已经被acl_master切换为普通身份(nobody)。
此外,还需要两点需要注明:
- 在 UNIX 系统平台上,服务程序监听的端口如果小于 1024,则操作系统则要求此时的运行身份需为 root;
- 在 Linux 平台下 Go 语言编写的服务程序是无法正常切换运行身份的(具体可参考 Go 源码)。
在acl_master 的运行机制下,可以完美解决以上二者的矛盾。
更多请参考examples
About
go 语言开发的服务器模板,可与 acl_master 服务器框架深度集成
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.