Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

https://godoc.org/github.com/gogf/gf/net/ghttp

哈喽世界

老规矩,我们先来一个Hello World

package main

import (
    "github.com/gogf/gf/frame/g"
    "github.com/gogf/gf/net/ghttp"
)

func main() {
    s := g.Server()
    s.BindHandler("/", func(r *ghttp.Request) {
        r.Response.Write("哈喽世界!")
    })
    s.Run()
}

...

关于其中的路由注册,我们将会在后续的章节中介绍,我们继续来看看如何创建一个支持静态文件的Server

静态服务

创建并运行一个支持静态文件的WebServer:

package main

import (
    "github.com/gogf/gf/frame/g"
)

func main() {
    s := g.Server()
    s.SetIndexFolder(true)
    s.SetServerRoot("/home/www/")
    s.Run()
}

...

Server默认情况下是没有任何主目录的设置,只有设置了主目录,才支持对应主目录下的静态文件的访问。

多端口监听

Server同时支持多端口监听,只需要往SetPort参数设置多个端口号即可(当然,针对于HTTPS服务,我们也同样可以通过SetHTTPSPort来设置绑定并支持多个端口号的监听,HTTPS服务的介绍请参看后续对应章节)。

...

http://127.0.0.1:8100/
http://127.0.0.1:8200/
http://127.0.0.1:8300/

多实例支持

Server支持同一进程多实例运行,下面我们来看一个例子:

...

可以看到我们在支持多个Server的语句中,给g.Server方法传递了不同的单例名称参数,该参数用于标识不同的Server实例,因此需要保证唯一性。如果需要获取同一个Server实例,那么传入同一个名称即可。例如在多个goroutine中,或者不同的模块中,都可以通过g.Server获取到同一个Server实例。

域名绑定

Server支持多域名绑定,并且不同的域名可以绑定不同的服务。

...

需要注意的是:Domain方法的参数必须是准确的域名,不支持泛域名形式,例如:*.goframe.org或者.goframe.org是不支持的,api.goframe.org或者goframe.org才被认为是正确的域名参数。

路由特性

Server提供了非常出色的路由特性,我们先来看一个简单的示例:

...

这是一个混合的路由规则示例,用于展示某个班级、某个学科、某个学生、对应的操作,运行后,我们可以通过例如该地址: http://127.0.0.1:8199/class3-math/john/score 看到测试结果。在页面上你可以看得到对应的路由规则都被一一解析,业务层可以根据解析的参数进行对应的业务逻辑处理。 具体的路由注册管理介绍请查看后续【路由注册 - 路由规则】章节。

配置管理

GF的核心组件均实现了便捷的配置管理特性,仅需通过配置文件的修改即可实现组件的功能配置。大多数的场景中我们推荐使用配置文件来管理组件的配置,Server的配置请查看【配置管理】章节。

平滑重启

Server内置支持平滑重启特性,详细介绍请参考【开发高级 - 平滑重启】章节。

HTTPS支持

Server支持HTTPS服务,并且也同时支持单进程提供HTTP&HTTPS服务,HTTPS的详细介绍请参考【开发进阶 - HTTPS服务】章节。

更多功能特性

更多功能及特性请继续阅读后续章节。