mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
ghttp server易用性完善
This commit is contained in:
@ -1,2 +0,0 @@
|
||||
package ghttp
|
||||
|
||||
@ -2,7 +2,7 @@ package ghttp
|
||||
|
||||
// 控制器基类
|
||||
type Controller struct {
|
||||
Server *Server
|
||||
|
||||
}
|
||||
|
||||
func (c *Controller) Get(*ClientRequest, *ServerResponse) {}
|
||||
|
||||
@ -9,11 +9,13 @@ import (
|
||||
"log"
|
||||
"sync"
|
||||
"errors"
|
||||
"gitee.com/johng/gf/g/container/gmap"
|
||||
)
|
||||
|
||||
// http server结构体
|
||||
type Server struct {
|
||||
hmu sync.RWMutex // handlerMap互斥锁
|
||||
name string // 服务名称,方便识别
|
||||
server http.Server // 底层http server对象
|
||||
config ServerConfig // 配置对象
|
||||
handlerMap HandlerMap // 回调函数
|
||||
@ -26,25 +28,27 @@ type HandlerFunc func(*ClientRequest, *ServerResponse)
|
||||
// uri与回调函数的绑定记录表
|
||||
type HandlerMap map[string]HandlerFunc
|
||||
|
||||
// ServerMap互斥锁
|
||||
var smu sync.RWMutex
|
||||
// Server表,用以存储和检索多个Server对象
|
||||
var smap map[string]*Server = make(map[string]*Server)
|
||||
// Server表,用以存储和检索名称与Server对象之间的关联关系
|
||||
var serverMapping *gmap.StringInterfaceMap = gmap.NewStringInterfaceMap()
|
||||
|
||||
// 创建一个默认配置的HTTP Server(默认监听端口是80)
|
||||
func GetServer(name string) (*Server) {
|
||||
smu.Lock()
|
||||
defer smu.Unlock()
|
||||
if s, ok := smap[name]; ok {
|
||||
return s
|
||||
if s := serverMapping.Get(name); s != nil {
|
||||
return s.(*Server)
|
||||
}
|
||||
smap[name] = &Server{}
|
||||
smap[name].SetConfig(defaultServerConfig)
|
||||
return smap[name]
|
||||
s := &Server{}
|
||||
s.name = name
|
||||
s.SetConfig(defaultServerConfig)
|
||||
serverMapping.Set(name, s)
|
||||
return s
|
||||
}
|
||||
|
||||
// 执行
|
||||
func (s *Server) Run() error {
|
||||
if s.status == 1 {
|
||||
return errors.New("server is already running")
|
||||
}
|
||||
|
||||
// 底层http server配置
|
||||
if s.config.Handler == nil {
|
||||
s.config.Handler = http.HandlerFunc(s.defaultHttpHandle)
|
||||
@ -99,15 +103,6 @@ func (s *Server)SetAddr(addr string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 设置http server参数 - Handler
|
||||
func (s *Server)SetHandler(handler http.Handler) error {
|
||||
if s.status == 1 {
|
||||
return errors.New("server config cannot be changed while running")
|
||||
}
|
||||
s.config.Handler = handler
|
||||
return nil
|
||||
}
|
||||
|
||||
// 设置http server参数 - TLSConfig
|
||||
func (s *Server)SetTLSConfig(tls *tls.Config) error {
|
||||
if s.status == 1 {
|
||||
|
||||
@ -12,8 +12,13 @@ import (
|
||||
"gitee.com/johng/gf/g/encoding/ghtml"
|
||||
)
|
||||
|
||||
// 默认HTTP Server处理入口,底层默认使用了gorutine调用该接口
|
||||
// 默认HTTP Server处理入口,http包底层默认使用了gorutine异步处理请求,所以这里不再异步执行
|
||||
func (s *Server)defaultHttpHandle(w http.ResponseWriter, r *http.Request) {
|
||||
s.handleRequest(w, r)
|
||||
}
|
||||
|
||||
// 执行处理HTTP请求
|
||||
func (s *Server)handleRequest(w http.ResponseWriter, r *http.Request) {
|
||||
request := ClientRequest{}
|
||||
response := ServerResponse {server : s}
|
||||
request.Request = *r
|
||||
|
||||
@ -18,12 +18,7 @@ func init() {
|
||||
|
||||
// 定义操作逻辑
|
||||
func (cu *Controller_User) Info(r *ghttp.ClientRequest, w *ghttp.ServerResponse) {
|
||||
uid := r.GetQueryString("uid")
|
||||
if uid != "" {
|
||||
w.Write([]byte("uid: " + uid + "\n"))
|
||||
}
|
||||
w.Write([]byte("name: John\n"))
|
||||
w.Write([]byte("..."))
|
||||
w.Write([]byte("user information page"))
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ func init() {
|
||||
|
||||
// 定义操作逻辑
|
||||
func (cu *Controller_User_Register) Show(r *ghttp.ClientRequest, w *ghttp.ServerResponse) {
|
||||
w.Write([]byte("register page"))
|
||||
w.Write([]byte("user register page"))
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user