From 7279eb768747f5dde03d0c5c0a728076b386cb24 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 2 Jan 2018 16:35:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BService=20Response=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/frame/gmvc/controller.go | 12 ++++++------ g/frame/gmvc/view.go | 4 ++-- .../{http_client.go => http_client_request.go} | 5 ----- g/net/ghttp/http_client_response.go | 6 ++++++ g/net/ghttp/http_controller.go | 1 - g/net/ghttp/http_request.go | 2 +- ...{http_server_response.go => http_response.go} | 16 ++++++++-------- g/net/ghttp/http_server_cookie.go | 4 ++-- g/net/ghttp/http_server_handler.go | 3 ++- 9 files changed, 27 insertions(+), 26 deletions(-) rename g/net/ghttp/{http_client.go => http_client_request.go} (97%) rename g/net/ghttp/{http_server_response.go => http_response.go} (82%) diff --git a/g/frame/gmvc/controller.go b/g/frame/gmvc/controller.go index f307e464e..8ed1fa056 100644 --- a/g/frame/gmvc/controller.go +++ b/g/frame/gmvc/controller.go @@ -14,12 +14,12 @@ import ( // 控制器基类 type Controller struct { - Server *ghttp.Server // Web Server对象 - Request *ghttp.Request // 请求数据对象 - Response *ghttp.ServerResponse // 返回数据对象 - Cookie *ghttp.Cookie // COOKIE操作对象 - Session *ghttp.Session // SESSION操作对象 - View *View // 视图对象 + Request *ghttp.Request // 请求数据对象 + Response *ghttp.Response // 返回数据对象(r.Response) + Server *ghttp.Server // Web Server对象(r.Server) + Cookie *ghttp.Cookie // COOKIE操作对象 + Session *ghttp.Session // SESSION操作对象 + View *View // 视图对象 } // 控制器初始化接口方法 diff --git a/g/frame/gmvc/view.go b/g/frame/gmvc/view.go index 001bca52a..1adad160c 100644 --- a/g/frame/gmvc/view.go +++ b/g/frame/gmvc/view.go @@ -20,11 +20,11 @@ type View struct { mu sync.RWMutex // 并发互斥锁 view *gview.View // 底层视图对象 data map[string]interface{} // 视图数据 - response *ghttp.ServerResponse // 数据返回对象 + response *ghttp.Response // 数据返回对象 } // 创建一个MVC请求中使用的视图对象 -func NewView(w *ghttp.ServerResponse) *View { +func NewView(w *ghttp.Response) *View { return &View{ view : gins.View(), data : make(map[string]interface{}), diff --git a/g/net/ghttp/http_client.go b/g/net/ghttp/http_client_request.go similarity index 97% rename from g/net/ghttp/http_client.go rename to g/net/ghttp/http_client_request.go index ed0e95973..471fba2a5 100644 --- a/g/net/ghttp/http_client.go +++ b/g/net/ghttp/http_client_request.go @@ -19,11 +19,6 @@ type Client struct { http.Client } -// 客户端请求结果对象 -type ClientResponse struct { - http.Response -} - // http客户端对象指针 func NewClient() (*Client) { return &Client{} diff --git a/g/net/ghttp/http_client_response.go b/g/net/ghttp/http_client_response.go index b5431dc14..88fe87b7e 100644 --- a/g/net/ghttp/http_client_response.go +++ b/g/net/ghttp/http_client_response.go @@ -8,8 +8,14 @@ package ghttp import ( "io/ioutil" + "net/http" ) +// 客户端请求结果对象 +type ClientResponse struct { + http.Response +} + // 获取返回的数据 func (r *ClientResponse) ReadAll() []byte { body, err := ioutil.ReadAll(r.Body) diff --git a/g/net/ghttp/http_controller.go b/g/net/ghttp/http_controller.go index 47dbadfc1..164d08fe5 100644 --- a/g/net/ghttp/http_controller.go +++ b/g/net/ghttp/http_controller.go @@ -7,7 +7,6 @@ package ghttp - // 控制器接口 type Controller interface { Init(*Request) diff --git a/g/net/ghttp/http_request.go b/g/net/ghttp/http_request.go index 7694221c6..9cfd0b14a 100644 --- a/g/net/ghttp/http_request.go +++ b/g/net/ghttp/http_request.go @@ -22,7 +22,7 @@ type Request struct { Server *Server // 请求关联的服务器对象 Cookie *Cookie // 与当前请求绑定的Cookie对象(并发安全) Session *Session // 与当前请求绑定的Session对象(并发安全) - Response *ServerResponse // 对应请求的返回数据操作对象 + Response *Response // 对应请求的返回数据操作对象 } // 获得指定名称的get参数列表 diff --git a/g/net/ghttp/http_server_response.go b/g/net/ghttp/http_response.go similarity index 82% rename from g/net/ghttp/http_server_response.go rename to g/net/ghttp/http_response.go index 7fbbfef9d..da34aa3b3 100644 --- a/g/net/ghttp/http_server_response.go +++ b/g/net/ghttp/http_response.go @@ -14,7 +14,7 @@ import ( ) // 服务端请求返回对象 -type ServerResponse struct { +type Response struct { http.ResponseWriter bufmu sync.RWMutex // 缓冲区互斥锁 buffer []byte // 每个请求的返回数据缓冲区 @@ -28,21 +28,21 @@ type ResponseJson struct { } // 返回信息(byte) -func (r *ServerResponse) Write(content []byte) { +func (r *Response) Write(content []byte) { r.bufmu.Lock() defer r.bufmu.Unlock() r.buffer = append(r.buffer, content...) } // 返回信息(string) -func (r *ServerResponse) WriteString(content string) { +func (r *Response) WriteString(content string) { r.bufmu.Lock() defer r.bufmu.Unlock() r.buffer = append(r.buffer, content...) } // 返回固定格式的json -func (r *ServerResponse) WriteJson(result int, message string, data []byte) error { +func (r *Response) WriteJson(result int, message string, data []byte) error { r.Header().Set("Content-Type", "application/json") r.bufmu.Lock() defer r.bufmu.Unlock() @@ -55,26 +55,26 @@ func (r *ServerResponse) WriteJson(result int, message string, data []byte) erro } // 返回内容编码 -func (r *ServerResponse) WriteHeaderEncoding(encoding string) { +func (r *Response) WriteHeaderEncoding(encoding string) { r.Header().Set("Content-Type", "text/plain; charset=" + encoding) } // 获取当前缓冲区中的数据 -func (r *ServerResponse) Buffer() []byte { +func (r *Response) Buffer() []byte { r.bufmu.RLock() defer r.bufmu.RUnlock() return r.buffer } // 清空缓冲区内容 -func (r *ServerResponse) ClearBuffer() { +func (r *Response) ClearBuffer() { r.bufmu.Lock() defer r.bufmu.Unlock() r.buffer = make([]byte, 0) } // 输出缓冲区数据到客户端 -func (r *ServerResponse) OutputBuffer() { +func (r *Response) OutputBuffer() { r.bufmu.Lock() defer r.bufmu.Unlock() if len(r.buffer) > 0 { diff --git a/g/net/ghttp/http_server_cookie.go b/g/net/ghttp/http_server_cookie.go index e1756bdd0..44bca7fde 100644 --- a/g/net/ghttp/http_server_cookie.go +++ b/g/net/ghttp/http_server_cookie.go @@ -29,8 +29,8 @@ type Cookie struct { mu sync.RWMutex // 并发安全互斥锁 data map[string]CookieItem // 数据项 domain string // 默认的cookie域名 - request *Request // 所属HTTP请求对象 - response *ServerResponse // 所属HTTP返回对象 + request *Request // 所属HTTP请求对象 + response *Response // 所属HTTP返回对象 } // cookie项 diff --git a/g/net/ghttp/http_server_handler.go b/g/net/ghttp/http_server_handler.go index a110253d2..e3735c3a9 100644 --- a/g/net/ghttp/http_server_handler.go +++ b/g/net/ghttp/http_server_handler.go @@ -39,8 +39,9 @@ func (s *Server)handleRequest(w http.ResponseWriter, r *http.Request) { // 构造请求参数对象 request := &Request{ Id : s.idgen.Int(), + Server : s, Request : *r, - Response : &ServerResponse { + Response : &Response { ResponseWriter : w, }, }