ghttp server易用性完善

This commit is contained in:
John
2017-12-08 12:03:21 +08:00
parent cec52cfbc1
commit 3155439f15
6 changed files with 24 additions and 31 deletions

View File

@ -1,2 +0,0 @@
package ghttp

View File

@ -2,7 +2,7 @@ package ghttp
// 控制器基类
type Controller struct {
Server *Server
}
func (c *Controller) Get(*ClientRequest, *ServerResponse) {}

View File

@ -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 {

View File

@ -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

View File

@ -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"))
}

View File

@ -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"))
}