文章介绍了如何使用Iris框架在同一台服务器上同时运行多个独立应用,分别监听不同端口,并通过域名进行区分。通过`recover`中间件处理错误,并展示了通过`Switch`功能绑定不同域名到对应应用实例的方法。
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
在 Iris 里面,提供了一种方式可以让我们同时运行多个应用:
这里说的应用只是一个 Iris 框架实例,这个实例可以有完全不同的路由定义、中间件等。
不同端口不同应用
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 了,同一个端口可以同时监听多个域名的请求:
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
去访问的时候,结果是不一样的。