83 lines
5.2 KiB
Plaintext
83 lines
5.2 KiB
Plaintext
/*
|
||
此包提供通用的HTTP/HTTPS服务器功能;
|
||
使用方法如下:
|
||
1、初始化一个HttpServer/HttpsServer
|
||
server := NewHttpServer(addr string, isCheckIP bool)
|
||
或
|
||
server := NewHttpsServer(addr, certFileName, keyFileName string, isCheckIP bool)
|
||
其中参数说明如下:
|
||
addr:服务器监听地址
|
||
isCheckIP:是否需要验证客户端IP(此设置针对所有的请求,对于每个请求也可以单独设置;以此设置为优先)
|
||
certFileName:证书文件的路径
|
||
keyFileName:密钥文件的路径
|
||
|
||
2、设置server的属性
|
||
在服务器运行过程中,会有一些默认的行为,如果想要改变默认行为,可以通过调用以下的方法进行设置
|
||
|
||
1)、设定Http Header信息
|
||
SetHeader(header map[string]string)
|
||
默认的Http Header为空;如果设定了Http Header,则在每次请求时,都会给ResponseWriter加上该header属性
|
||
2)、设定HTTP请求方法
|
||
SetMethod(method string)
|
||
默认情况下,对请求的方法没有任何限制;如果设定了Method,则只允许该Method访问
|
||
3)、设定当HTTP请求方法无效时,调用的处理器
|
||
SetInvalidMethodHandler(handler func(*Context))
|
||
默认情况下,如果请求方法与所设置的方法不一致时,会返回406错误;如果设置了此属性,则会调用此属性进行处理
|
||
4)、设定默认页的处理器
|
||
SetDefaultPageHandler(handler func(*Context))
|
||
默认页指的是/, /favicon.ico这两个页面;默认情况下,仅仅是输出Welcome to home page.;如果需要针对做一些处理,可以设置此属性
|
||
5)、设定未找到指定的回调时的处理器
|
||
SetNotFoundPageHandler(handler func(*Context))
|
||
当服务器找不到对应的地址的Handler时,会返回404错误。如果需要处理一些非固定的地址时,可以使用此方法;比如回调地址中包含AppId,所以导致地址可变
|
||
6)、设定在Debug模式下是否需要验证IP地址
|
||
SetIfCheckIPWhenDebug(value bool)
|
||
默认情况下,在DEBUG模式时不验证IP;可以通过此属性改变此此行为
|
||
7)、设定当IP无效时调用的处理器
|
||
SetIPInvalidHandler(handler func(*Context))
|
||
当需要验证IP并且IP无效时,默认情况下会返回401错误;如果设定了此属性,则可以改变该行为
|
||
8)、设定当检测到参数无效时调用的处理器
|
||
SetParamInvalidHandler(handler func(*Context))
|
||
当检测到参数无效时,默认情况下会返回500错误;如果设置了此属性,则可以改变该行为
|
||
9)、设定处理请求数据的处理器(例如压缩、解密等)
|
||
SetRequestDataHandler(handler func(*Context, []byte) ([]byte, error))
|
||
如果设定此属性,则在处理接收到的请求数据时,会调用此属性
|
||
10)、设定处理响应数据的处理器(例如压缩、加密等)
|
||
SetResponseDataHandler(handler func(*Context, []byte) ([]byte, error))
|
||
如果设定此属性,则在处理返回给客户端的数据时,会调用此属性
|
||
11)、设定请求执行时间的处理器
|
||
SetExecuteTimeHandler(handler func(*Context))
|
||
如果在请求结束后想要处理调用的时间,则需要设置此属性;例如请求时间过长则记录日志等
|
||
|
||
3、注册handler
|
||
server.RegisterHandler(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig)
|
||
参数如下:
|
||
// path:注册的访问路径
|
||
// callback:回调方法
|
||
// configObj:Handler配置对象
|
||
例如:server.RegisterHandler("/get/notice", getNoticeConfig, &webServer.HandlerConfig{IsCheckIP: false, ParamNameList: []string{"appid"}})
|
||
|
||
4、启动对应的服务器
|
||
server.Start(wg *sync.WaitGroup)
|
||
|
||
5、context中提供了很多实用的方法
|
||
1)、GetRequestPath() string:获取请求路径(该路径不带参数)
|
||
2)、GetRequestIP() string:获取请求的客户端的IP地址
|
||
3)、GetExecuteSeconds() int64:获取请求执行的秒数。当然也可以通过获取StartTime, EndTime属性自己进行更高精度的处理
|
||
4)、String() string:将context里面的内容进行格式化,主要用于记录日志
|
||
5)、FormValue(key string) string:获取请求的参数值(包括GET/POST/PUT/DELETE等所有参数)
|
||
6)、PostFormValue(key string) string:获取POST的参数值
|
||
7)、GetFormValueData() typeUtil.MapData:获取所有参数的MapData类型(包括GET/POST/PUT/DELETE等所有参数)
|
||
8)、GetPostFormValueData() typeUtil.MapData:获取POST参数的MapData类型
|
||
9)、GetMultipartFormValueData() typeUtil.MapData:获取MultipartForm的MapData类型
|
||
10)、GetRequestBytes() (result []byte, exists bool, err error):获取请求字节数据
|
||
11)、GetRequestString() (result string, exists bool, err error):获取请求字符串数据
|
||
12)、Unmarshal(obj interface{}) (exists bool, err error):反序列化为对象(JSON)
|
||
13)、WriteString(result string):输出字符串给客户端
|
||
14)、WriteJson(result interface{}):输出json数据给客户端
|
||
15)、RedirectTo(url string):重定向到其它页面
|
||
如果以上的方法不能满足需求,则可以调用以下的方法来获取原始的Request/ResponseWriter对象进行处理
|
||
16)、GetRequest() *http.Request:获取请求对象
|
||
17)、GetResponseWriter() http.ResponseWriter:获取响应对象
|
||
*/
|
||
package webServer
|