IRIS自定义监听器

简单监听器

目录结构

主目录customListener

  1. —— main.go

代码示例

main.go

  1. package main
  2. import (
  3. "net"
  4. "github.com/kataras/iris"
  5. )
  6. func main() {
  7. app := iris.New()
  8. app.Get("/", func(ctx iris.Context) {
  9. ctx.Writef("Hello from the server")
  10. })
  11. app.Get("/mypath", func(ctx iris.Context) {
  12. ctx.Writef("Hello from %s", ctx.Path())
  13. })
  14. //创建任何自定义tcp侦听器,unix sock文件或tls tcp侦听器。
  15. l, err := net.Listen("tcp4", ":8080")
  16. if err != nil {
  17. panic(err)
  18. }
  19. //使用自定义侦听器
  20. app.Run(iris.Listener(l))
  21. }

linux监听器

目录结构

主目录unixReuseport

  1. —— main.go
  2. —— main_windows.go

代码示例

main.go

  1. // +build linux darwin dragonfly freebsd netbsd openbsd rumprun
  2. package main
  3. import (
  4. //包tcplisten提供各种可自定义的TCP net.Listener
  5. //与性能相关的选项:
  6. // - SO_REUSEPORT。 此选项允许线性扩展服务器性能 在多CPU服务器上。
  7. //有关详细信息,请参阅https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/。
  8. // - TCP_DEFER_ACCEPT。 此选项期望服务器从接受的读取写入之前的连接。
  9. // - TCP_FASTOPEN。 有关详细信息,请参阅https://lwn.net/Articles/508865/。
  10. "github.com/valyala/tcplisten"
  11. "github.com/kataras/iris"
  12. )
  13. //注意只支持linux系统
  14. // $ go get github.com/valyala/tcplisten
  15. // $ go run main.go
  16. func main() {
  17. app := iris.New()
  18. app.Get("/", func(ctx iris.Context) {
  19. ctx.HTML("<b>Hello World!</b>")
  20. })
  21. listenerCfg := tcplisten.Config{
  22. ReusePort: true,
  23. DeferAccept: true,
  24. FastOpen: true,
  25. }
  26. l, err := listenerCfg.NewListener("tcp", ":8080")
  27. if err != nil {
  28. panic(err)
  29. }
  30. app.Run(iris.Listener(l))
  31. }

main_windows.go

  1. // +build windows
  2. package main
  3. func main() {
  4. panic("windows operating system does not support this feature")
  5. }