ONE IS ALL
为了简洁而优美的大一统理论肝了好久,API终于趋于稳定了.
如果对您有帮助, 麻烦点个star
, 您的支持是我更新的动力.
lxzan/uRouter: HTTP & WebSocket router library for golang (github.com)
简介
uRouter
是一个通用的、高度可定制化的web router
抽象,在多种网络协议(HTTP1/2/3
, WebSocket
…)中获得一致的编程体验.
适合场景
- 同时使用多种网络协议, 例如
HTTP
+WebSocket
- 使用
HTTP
以外的网络协议, 缺少一个趁手的路由 - 尝鲜
快速上手
package main
import (
"github.com/lxzan/uRouter"
httpAdapter "github.com/lxzan/uRouter/contrib/adapter/http"
"github.com/lxzan/uRouter/contrib/codec/jsoniter"
"github.com/lxzan/uRouter/contrib/log/zerolog"
"net/http"
)
func init() {
uRouter.SetJsonCodec(jsoniter.JsoniterCodec)
uRouter.SetLogger(zerolog.ZeroLogger)
}
func main() {
var router = uRouter.New()
router.Use(uRouter.Recovery(), uRouter.AccessLog())
var group = router.Group("/api/v1")
group.OnGET("/user/list", func(ctx *uRouter.Context) {
_ = ctx.WriteJSON(http.StatusOK, []string{"ming", "hong"})
})
group.OnPOST("/user/:name", func(ctx *uRouter.Context) {
_ = ctx.WriteJSON(http.StatusOK, uRouter.Any{
"hello": ctx.Param("name"),
})
})
router.Start()
if err := http.ListenAndServe(":3000", httpAdapter.NewAdapter(router)); err != nil {
uRouter.Logger().Panic(err.Error())
}
}
- Output
性能
uRouter
wrk -t2 -c100 -d10s 'http://127.0.0.1:3000/api/v1/test'
Running 10s test @ http://127.0.0.1:3000/api/v1/test
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.10ms 1.91ms 29.86ms 89.53%
Req/Sec 93.14k 6.95k 103.45k 73.50%
1852591 requests in 10.00s, 210.25MB read
Requests/sec: 185213.28
Transfer/sec: 21.02MB
net/http
wrk -t2 -c100 -d10s 'http://127.0.0.1:3001/api/v1/test'
Running 10s test @ http://127.0.0.1:3001/api/v1/test
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.09ms 2.07ms 42.90ms 90.58%
Req/Sec 98.12k 6.96k 107.20k 70.79%
1971473 requests in 10.10s, 223.74MB read
Requests/sec: 195157.71
Transfer/sec: 22.15MB
本作品采用《CC 协议》,转载必须注明作者和本文链接