# README
twig
twig 是一个面向webapi的简单的webserver,Twig的目标是成为构建Golang微服务的基石
Twig 采用QQ群提供技术支持,QQ群号:472900117
性能测试
goos: linux
goarch: amd64
pkg: web
BenchmarkTwigStatic-2 20000 71232 ns/op 870 B/op 0 allocs/op
BenchmarkTwigGitHubAPI-2 10000 101092 ns/op 878 B/op 0 allocs/op
BenchmarkTwigGplusAPI-2 300000 5613 ns/op 57 B/op 0 allocs/op
BenchmarkTwigParseAPI-2 200000 10660 ns/op 173 B/op 0 allocs/op
BenchmarkEchoStatic-2 20000 63527 ns/op 2126 B/op 157 allocs/op
BenchmarkEchoGitHubAPI-2 20000 91821 ns/op 2496 B/op 203 allocs/op
BenchmarkEchoGplusAPI-2 300000 5072 ns/op 161 B/op 13 allocs/op
BenchmarkEchoParseAPI-2 200000 9195 ns/op 381 B/op 26 allocs/op
BenchmarkGinStatic-2 20000 75786 ns/op 8405 B/op 157 allocs/op
BenchmarkGinGitHubAPI-2 10000 103458 ns/op 10619 B/op 203 allocs/op
BenchmarkGinGplusAPI-2 200000 6049 ns/op 710 B/op 13 allocs/op
BenchmarkGinParseAPI-2 200000 11559 ns/op 1421 B/op 26 allocs/op
PASS
ok web 24.538s
Twig 比Gin更快,更好用!
安装
go get github.com/twiglab/twig
Twig 支持 go mod
入门
package main
import (
"net/http"
"os"
"time"
"github.com/twiglab/twig"
)
func main() {
web := twig.TODO()
web.AddServer(twig.NewServer(":4321")) // twig支持多server
// twig支持多路由, 在默认路由上增加handler
web.Config().
Get("/hello", func(c twig.Ctx) error {
return c.String(twig.OK, "Hello Twig!")
})
web.Start()
twig.Signal(twig.Graceful(web, 15*time.Second), os.Interrupt)
}
- Twig的默认监听端口是4321, 或者自定义自己的Server
- 使用twig.TODO()创建
默认的
Twig,默认的Twig包括,默认的路由实现(RadixTree),默认的Logger和默认的HttpErrorHandler - twig.Config是Twig提供的配置工具,Twig没有像别的webserver一样提供GET,POST等方法,所有的配置工作都通过Config完成
- Twig要求所有的Server的实现必须是非堵塞的,Start方法将启动Twig,Twig提供了Signal组件用于堵塞应用,处理系统信号,完成和shell的交互
Twig最大的特点是简洁,灵活,Twig的所有组建都以接口方式提供,支持重写,Twig也提供了Plugger模块,集成其他组建,用于增强Twig的功能
至此讲述的内容,已经足够让您运行并使用Twig。 祝您使用Twig愉快!
Twig的结构
Twig 是一个仔细设计过的webserver, 与其他的webserver不同,Twig的设计的目标是成为 构建应用程序的基石
Twig 的设计分为,核心,外围, 工具三个部分
核心
Twig 的核心组件包括:请求执行环境,服务器与连接器,日志,请求处理中间件,以及Twig本身
连接器和服务器完成对网络协议处理构成请求,请求处理中间件负责对请求过滤执行,执行环境用于提供应用执行所需要的上下文,用于业务处理,Twig把所有的组建继承成为一个完整的应用
服务器与连接器
(coming soon...)
请求执行环境
请求执行环境的功能是为应用提供一个上下文(Ctx),有下列组件构成:
- Lookuper(路由执行器)用于查找符合当前请求路径的handler,并返回执行环境Ctx
- Ctx (执行上下文)提供请求上下文
除此之外,执行环境还包括:
- Register(注册器)提供handler注册功能,可以用Config工具进行配置
- Muxer(路由器)描述接口
- HandlerFunc(请求处理)
执行环境的核心是Lookuper和Register 用于路由查找和路由注册(即Muxer接口)。Twig 通过路由查找器的Lookup方法查找并执行路由,返回Ctx,用于执行Handler
Ctx和HandlerFunc
中间件
(coming soon...)
插件 (Plugin)
多Server支持
# Packages
expamle:
package main
import (
"time"
"github.com/twiglab/twig"
"github.com/twiglab/twig/middleware"
"golang.org/x/time/rate"
)
func main() {
web := twig.TODO()
web.EnableDebug()
web.Pre(middleware.NewRateLimiter(rate.NewLimiter(rate.Every(100), 1000)))
web.Config().
# Functions
Attach 设置关联关系.
Bind 绑定ctx到变量.
No description provided by the author
Config 配置工具,对Register或者Assembler进行配置 参数为Register,需要注意的是:Config函数最低要求是Register 如果传入的是Register,那么调用插件方法时,会发生panic 这个不是bug, Config的设计如此 如果传入的是Assembler,那么可以进行plugin操作.
No description provided by the author
GetBinder 获取绑定接口.
No description provided by the author
GetPlugger 从当前Ctx中获取Plugger.
No description provided by the author
获取当前请求路径.
Graceful Graceful Shutdown.
No description provided by the author
No description provided by the author
No description provided by the author
Merge 中间件包装器.
No description provided by the author
No description provided by the author
NewLog 创建Logger.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Quit 正常退出,不做任何处理 注意,Quit后Signal后面的代码将被执行.
No description provided by the author
No description provided by the author
ServerInfo ServerInfo 中间件将Twig#Name()设置 Server 头 Debug状态下,返回 x-powerd-by 为Twig#Type().
Signal 用于监听系统信号并堵塞当前gorouting 参数f为信号处理函数 参数sig 为需要监听的系统信号,未出现在sig中的信号会被忽略 如果sig 为空,则监听所有信号 特别注意:部分操作系统的信号不可以被忽略 (SIGKILL & SIGSTOP).
Static 处理静态文件的HandlerFunc.
No description provided by the author
TODO 创建默认的Twig,后续可以用With*方法设置组建.
WrapHttpHandler 包装http.Handler 为HandlerFunc.
No description provided by the author
No description provided by the author
# Constants
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Access control.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Security.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
十分常用.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
PROPFIND = "PROPFIND".
No description provided by the author
No description provided by the author
No description provided by the author
# Variables
默认的错误处理.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
MethodNotAllowedHandler 全局405处理方法.
NotFoundHandler 全局404处理方法.
# Structs
Conf Twig路由配置工具.
HttpError 封装一个HttpError.
No description provided by the author
RadixTree Twig默认的路由实现.
ResponseWrap 包装http.ResponseWrite.
Twig.
# Interfaces
组装器.
Attacher 用于设置Twig和组件之间的联系.
Binder 数据绑定接口 Binder 作为一个插件集成到Twig中,请实现Plugger接口.
No description provided by the author
Ctx 接口,用于向Handler传递Twig上下文数据,并提供简化操作完成请求处理.
Cycler 设置周期管理.
Identifier 标识符接口.
IdGenerator ID发生器接口.
Logger Twig的Logger接口,用于日志输出.
Lookuper 接口 实现路由查找.
Matcher 决定一个路由是否匹配当前请求.
Mouter 接口用于模块化设置路由.
Muxer Muxer 描述一个具体的路由.
No description provided by the author
Plugger 定义了Twig的外部插件 如果插件需要生命周期管理,请实现Cycler接口 如果插件需要访问Twig本身,请实现Attacher接口.
No description provided by the author
PreCtx Pre中间件中使用.
Register 接口 实现路由注册.
Reloader 描述一个可以被重新加载的对象 在某些信号发生时候, 可以对Relaoder对象进行Reload操作,用于重新加载.
No description provided by the author
Server Http处理器接口.
# Type aliases
HandlerFunc Twig的Handler方法.
No description provided by the author
M 全局通用的map.
No description provided by the author
No description provided by the author
No description provided by the author
信号处理函数 返回true 退出 返回false 等待处理下一个信号.