在 Iris 里面,提供了一种方式可以让我们同时运行多个应用:
这里说的应用只是一个 Iris
框架实例,这个实例可以有完全不同的路由定义、中间件等。
不同端口不同应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| package main
import ( "log" "net/http" "time"
"github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/recover"
"golang.org/x/sync/errgroup" )
var g errgroup.Group
func startApp1() error { app := iris.New().SetName("app1") app.Use(recover.New()) app.Get("/", func(ctx iris.Context) { ctx.JSON(iris.Map{ "code": iris.StatusOK, "message": "Welcome server 1", }) })
app.Build() return app.Listen(":8080") }
func startApp2() error { app := iris.New().SetName("app2") app.Use(recover.New()) app.Get("/", func(ctx iris.Context) { ctx.JSON(iris.Map{ "code": iris.StatusOK, "message": "Welcome server 2", }) })
return app.Listen(":8081") }
func main() { g.Go(startApp1) g.Go(startApp2)
if err := g.Wait(); err != nil { log.Fatal(err) } }
|
在这个例子中,我们监听了两个端口
8080
、8081
,我们可以通过这两个端口来访问这两个应用。
不同域名不同应用
这个就有点类似于 nginx 了,同一个端口可以同时监听多个域名的请求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main
import ( "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/apps" "github.com/kataras/iris/v12/middleware/recover" )
func main() { app3 := iris.New().SetName("app3") app3.Use(recover.New()) app3.Get("/", func(ctx iris.Context) { ctx.WriteString("ha3") })
app4 := iris.New().SetName("app4") app4.Use(recover.New()) app4.Get("/", func(ctx iris.Context) { ctx.WriteString("ha4") })
switcher := apps.Switch(apps.Hosts{ apps.Host{ Pattern: "app3.local", Target: app3, }, apps.Host{ Pattern: "app4.local", Target: app4, }, }) switcher.Listen(":9010") }
|
在这个例子中,监听了 9010
端口,但是通过
app3.local
和 app4.local
去访问的时候,结果是不一样的。