古老的榕树

Negroni 应用教程系列(一)

潘军杰 发表于 2018-01-10 23:48 阅读(2905) 评论(0) 赞(2)

创建一个 Web 服务器

Negroni 本身和 Go 语言哲学是一脉相承的,这是作者的初衷。我们看看怎么创建一个 Web 服务器。

新建一个 server.go 文件,代码如下:

package main

import (
  "fmt"
  "net/http"
  "github.com/urfave/negroni"
)

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Hi,I'm Negroni!")
  })

  n := negroni.Classic() // Includes some default middlewares
  n.UseHandler(mux)

  http.ListenAndServe(":3000", n)
}

这就创建好了一个 Web 服务器,怎么样?比 Java 简单多了吧?在 Go 的世界里,我们完全可以摒弃那些类似 Tomcat Jetty Jboss 容器来跑一个 Web 应用。

开始我们采用 Go 原生的路由器:

mux := http.NewServeMux()

后面我们会介绍,更灵活的第三方路由器 Gorilla Mux:https://github.com/gorilla/mux

路由器代理一个 Go Handler,响应一个页面的具体内容,我们这次只输出一行文字,不会是 Hello World! 的,不能太俗了。

func(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Hi,I'm Negroni!")
  }

怎么样?传入响应 ResponseWriter 输出接口和 http.Request 对象,这是原生推崇的方式,后面扩展很地道了。

Negroni 内置了一个经典实例 negroni.Classic(),里面有基本的 Web 组件:日志,异常处理,静态文件,他们都是以中间件的形式。后面我们还会对这三个组件逐一介绍,一步步来吧!

negroni.Classic() 实例其实也是一个 Go http handle,我们放入原生 ListenAndServe 函数里,通过一个端口监听它:

go run server.go

这时浏览器打开地址 http://localhost:3000 你会看到一行文本输出:

Hi,I'm negroni!

改造原始的 Web 服务器

有时候我们想对 Web 服务器参数做一些微调也是可以的,代码如下:

package main

import (
  "fmt"
  "log"
  "net/http"
  "time"
  "github.com/urfave/negroni"
)

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Hi,I'm negroni!")
  })

  n := negroni.Classic() // Includes some default middlewares
  n.UseHandler(mux)

  s := &http.Server{
    Addr:           ":3000",
    Handler:        n,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
  }
  log.Fatal(s.ListenAndServe())
}

上面我们说 negroni.Classic() 实例其实就是一个 Go http handle,所以直接扔到 http.Server 里,跑得妥妥的。同时我们再对连接的读写超时时间做微调:分别指定10秒;响应头部字节数也做大小调整。

最后控制器里打印启动发生的异常日志:

log.Fatal(s.ListenAndServe())
标签: Go Negroni 中间件
0 条网友评论

哇~~~ 竟然还没有评论!

称呼*
邮箱*
内容*
验证码*
验证码 看不清换张