在 Iris 里面,提供了一种方式可以让我们同时运行多个应用:
这里说的应用只是一个 Iris 框架实例,这个实例可以有完全不同的路由定义、中间件等。
不同端口不同应用
package mainimport ("log""net/http""time""github.com/kataras/iris/v12""github.com/kataras/iris/v12/middleware/recover""golang.org/x/sync/errgroup"
)var g errgroup.Groupfunc 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 了,同一个端口可以同时监听多个域名的请求:
package mainimport ("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
去访问的时候,结果是不一样的。