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

ONE IS ALL

性能

  • 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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!