Home  /  tlnet


tlnet 极简go http服务框架 [English]


  • tlnet主要目的是让http开发更加简单,代码更加洁简
  • tlnet具备http基本功能.包括GET,PUT,POST等
  • tlnet实现拦截器,包括正则匹配拦截url等拦截功能
  • tlnet支持websocket,实现websocket服务变得极为简单
  • tlnet遵循原生gohttp的使用逻辑,所以极容易将原生http迁移到tlnet
  • tlnet遵循go原生路由,性能由当前go版本http性能决定

基础使用用例:

tlnet := NewTlnet() 
tlnet.GET("/g", getFunc)       //http get请求
tlnet.POST("/p", postFunc)   //http post请求
tlnet.HandleStatic("/js", "/html/js", nil) //设置静态资源访问
tlnet.HttpStart(":8000")  

func getFunc(hc *HttpContext) {
    logging.Debug(hc.ReqInfo)  //打印http信息
    logging.Debug(hc.GetParam("name"))  //打印参数name的值
    hc.ResponseString("hello tlnet")  //返回客户端字符串:hello tlnet
}

func postFunc(hc *HttpContext) {
    logging.Debug(hc.ReqInfo)  //打印http信息
    logging.Debug(hc.PostParam("name"))  //打印参数name的值
    hc.ResponseString("hello tlnet")  //返回客户端字符串:hello tlnet
}


拦截器使用用例:

tlnet := NewTlnet() 
tlnet.GET("/g", getFunc)       //http get请求
tlnet.POST("/p", postFunc)   //http post请求
tlnet.Handle("/", func(hc *HttpContext) {hc.ResponseString("hi,123")) })   //tlnet 的通用处理方式
tlnet.HandleWithFilter("/",interceptFilter("[a-z]"),func(hc *HttpContext) {hc.ResponseString("hi,123")) })   //http通用处理并定义拦截器
//设置静态资源访问
tlnet.HandleStatic("/js", "/html/js", nil)
tlnet.HandleStaticWithFilter("/", "./", notAllow("(.go)$"), nil)  //静态资源并定义拦截器,拦截go文件访问权限
tlnet.HttpStart(":8000") 

func getFunc(hc *HttpContext) {
    logging.Debug(hc.ReqInfo)  //打印http一般信息
    logging.Debug(hc.GetParam("name"))  //打印test
    hc.ResponseString("hello tlnet")  /*返回hello tlnet*/
}

func postFunc(hc *HttpContext) {
    logging.Debug(hc.ReqInfo)  //打印http一般信息
    logging.Debug(hc.PostParam("name"))  
    hc.ResponseString("hello tlnet")  /*返回hello tlnet*/
}

//拦截器
func interceptFilter(pattern string) (f *Filter) {
    f = NewFilter()
    f.AddIntercept(pattern, func(hc *HttpContext) bool {
    hc.ResponseString("被拦截了")
    return true // 返回true则 HandleWithFilter中handlerFunc不执行,false则会执行
    })
    return
}

// 定义拦截器,不允许访问go文件: (.go)$
func notAllow(pattern string) (f *Filter) {
    f = NewFilter()
    f.AddIntercept(pattern, func(hc *HttpContext) bool {
    hc.ResponseBytes(http.StatusMethodNotAllowed, []byte(hc.ReqInfo.Uri+" not allow"))
    return true // 返回true则 HandleWithFilter中handlerFunc不执行,false则会执行
    })
    return
}

websocket的基础使用:

tlnet := NewTlnet() 
tlnet.HandleWebSocket("/ws", websocketFunc)  
tlnet.HttpStart(8080) 

var wsmap = make(map[int64]*HttpContext, 0)
func websocketFunc(hc *HttpContext) {
//每个websocket有一个id,链接识别id
    wsId := hc.WS.Id
    msg := string(hc.WS.Read())  //  hc.WS.Read()读取客户端请求数据
    _, ok := wsmap[wsId]
    if !ok {
        if msg == "123456" {
            wsmap[wsId] = hc
            hc.WS.Send(fmt.Sprint("id=", wsId))  //向客户端发送数据
        }
        return
    }
    logging.Debug(hc.ReqInfo)
//收到客户端信息
    logging.Debug(msg)
    hc.WS.Send("你发送的是:" + msg)
    for k, v := range wsmap {
        if k != wsId {
            v.WS.Send(fmt.Sprint("这是【", wsId, "】发送的信息:", msg))
        }
    }
}

tlnet的高级使用用例:

tlnet.SetMaxBytesReader((1 << 20) * 50) //websocket body最大限制 50m
tlnet.HandleWebSocketBindOrigin("/ws", "http://tlnet/", websocketFunc)  //定义Origin
tlnet.HandleWebSocketBindConfig("/ws3", websocketFunc, newWebsocketConfig()) //定义 config
tlnet.AddHandlerFunc("/aaa", nil, func(w ResponseWriter, r *Request){})  // 对接go http原生handler
tlnet.AddStaticHandler("/", "./", nil, nil)//静态资源对接原生handler
tlnet.ReadTimeout(10 * time.Second) //设置读取超时
tlnet.HttpStartTLS(":8000",certFile, keyFile)  //TLS by file
tlnet.HttpStartTlsBytes(":8000",certFileBs, keyFileBs) //TLS by bytes
tlnet.Close()  //关闭连接