[TOC]
  • IRIS自定义监听器简单监听器目录结构代码示例linux监听器目录结构代码示例

IRIS自定义监听器

简单监听器

目录结构

主目录customListener

    —— main.go

代码示例

main.go

package mainimport (    "net"    "github.com/kataras/iris")func main() {    app := iris.New()    app.Get("/", func(ctx iris.Context) {        ctx.Writef("Hello from the server")    })    app.Get("/mypath", func(ctx iris.Context) {        ctx.Writef("Hello from %s", ctx.Path())    })    //创建任何自定义tcp侦听器,unix sock文件或tls tcp侦听器。    l, err := net.Listen("tcp4", ":8080")    if err != nil {        panic(err)    }    //使用自定义侦听器    app.Run(iris.Listener(l))}

linux监听器

目录结构

主目录unixReuseport

    —— main.go    —— main_windows.go

代码示例

main.go

// +build linux darwin dragonfly freebsd netbsd openbsd rumprunpackage mainimport (    //包tcplisten提供各种可自定义的TCP net.Listener    //与性能相关的选项:    // - SO_REUSEPORT。 此选项允许线性扩展服务器性能 在多CPU服务器上。    //有关详细信息,请参阅https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/。    // - TCP_DEFER_ACCEPT。 此选项期望服务器从接受的读取写入之前的连接。    // - TCP_FASTOPEN。 有关详细信息,请参阅https://lwn.net/Articles/508865/。    "github.com/valyala/tcplisten"    "github.com/kataras/iris")//注意只支持linux系统// $ go get github.com/valyala/tcplisten// $ go run main.gofunc main() {    app := iris.New()    app.Get("/", func(ctx iris.Context) {        ctx.HTML("<b>Hello World!</b>")    })    listenerCfg := tcplisten.Config{        ReusePort:   true,        DeferAccept: true,        FastOpen:    true,    }    l, err := listenerCfg.NewListener("tcp", ":8080")    if err != nil {        panic(err)    }    app.Run(iris.Listener(l))}

main_windows.go

// +build windowspackage mainfunc main() {    panic("windows operating system does not support this feature")}