Documentation ¶
Index ¶
- Constants
- Variables
- func Error(w ResponseWriter, err string, code int)
- func ExtendTemplatePackage(pkgName string, deputy template.FuncMap)
- func Nonce() (nonce string, err error)
- func ParseIOTVersion(vers string) (major, minor int, ok bool)
- type Client
- func (T *Client) Do(req *Request) (resp *Response, err error)
- func (T *Client) DoCtx(ctx context.Context, req *Request) (resp *Response, err error)
- func (T *Client) Get(url string, header Header) (resp *Response, err error)
- func (T *Client) GetCtx(ctx context.Context, urlstr string, header Header) (resp *Response, err error)
- func (T *Client) Post(url string, header Header, body interface{}) (resp *Response, err error)
- func (T *Client) PostCtx(ctx context.Context, urlstr string, header Header, body interface{}) (resp *Response, err error)
- type CloseNotifier
- type ConnState
- type DotContexter
- type DynamicTemplateFunc
- type DynamicTemplater
- type Globaler
- type Handler
- type HandlerFunc
- type Header
- type Hijacker
- type Home
- type HomeMan
- type HomePool
- type Launcher
- type Request
- func (T *Request) Context() context.Context
- func (T *Request) GetBasicAuth() (username, password string, ok bool)
- func (T *Request) GetBody(i interface{}) error
- func (T *Request) GetNonce() string
- func (T *Request) GetTokenAuth() (token string, ok bool)
- func (T *Request) ProtoAtLeast(major, minor int) bool
- func (T *Request) RequestConfig(nonce string) (riot *RequestConfig, err error)
- func (T *Request) SetBasicAuth(username, password string)
- func (T *Request) SetBody(i interface{}) error
- func (T *Request) SetTokenAuth(token string)
- func (T *Request) WithContext(ctx context.Context) *Request
- type RequestConfig
- type Response
- type ResponseConfig
- type ResponseWriter
- type RoundTripper
- type Route
- type Server
- type ServerHandlerDynamic
- func (T *ServerHandlerDynamic) Execute(bufw io.Writer, dock interface{}) (err error)
- func (T *ServerHandlerDynamic) Parse(r io.Reader) (err error)
- func (T *ServerHandlerDynamic) ParseFile(path string) error
- func (T *ServerHandlerDynamic) ParseText(name, content string) error
- func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)
- type ServerHandlerDynamicTemplateExtend
- func (T *ServerHandlerDynamicTemplateExtend) Call(f func([]reflect.Value) []reflect.Value, args ...interface{}) []interface{}
- func (T *ServerHandlerDynamicTemplateExtend) ExecuteTemplate(out io.Writer, name string, in interface{}) error
- func (T *ServerHandlerDynamicTemplateExtend) NewFunc(name string) (f func([]reflect.Value) []reflect.Value, err error)
- type Session
- type Sessioner
- type Sessions
- type TemplateDot
- func (T *TemplateDot) Context() context.Context
- func (T *TemplateDot) Defer(call interface{}, args ...interface{}) error
- func (T *TemplateDot) Free()
- func (T *TemplateDot) Global() Globaler
- func (T *TemplateDot) Header() Header
- func (T *TemplateDot) Hijack() (net.Conn, *bufio.ReadWriter, error)
- func (T *TemplateDot) Launch() RoundTripper
- func (T *TemplateDot) Request() *Request
- func (T *TemplateDot) ResponseWriter() ResponseWriter
- func (T *TemplateDot) RootDir(upath string) string
- func (T *TemplateDot) Session(token string) Sessioner
- func (T *TemplateDot) Swap() *vmap.Map
- func (T *TemplateDot) WithContext(ctx context.Context)
- type TemplateDoter
Constants ¶
const DefaultLineBytes = 1 << 20 // 1 MB
默认读取数据行大小
Variables ¶
var ( ServerContextKey = &contextKey{"iot-server"} // 服务器 LocalAddrContextKey = &contextKey{"local-addr"} // 监听地址 )
上下文中使用的key
var ( ErrBodyNotAllowed = errors.New("The request method or status code is not allowed") ErrGetBodyed = errors.New("Does not support repeated reading of body") ErrHijacked = errors.New("Connection has been hijacked") ErrLaunched = errors.New("The connection is waiting for the response of the active request") ErrAbortHandler = errors.New("Abort processing") ErrServerClosed = errors.New("Server is down") ErrDoned = errors.New("Has been completed") ErrConnClose = errors.New("Device connection is closed") ErrHomeInvalid = errors.New("viot: Home invalid") ErrURIInvalid = errors.New("viot: URI invalid") ErrProtoInvalid = errors.New("viot: Proto Invalid") ErrMethodInvalid = errors.New("viot: Method Invalid") )
var DefaultHomePool = NewHomePool() // 池(默认)
var TemplateFunc = vweb.TemplateFunc
内部模板函数
Functions ¶
func Error ¶
func Error(w ResponseWriter, err string, code int)
快速设置错误
w ResponseWriter 响应 err string 错误字符串 code int 错误代码
func ExtendTemplatePackage ¶
ExtendTemplatePackage 扩展模板的包
pkgName string 包名 deputy template.FuncMap 函数集
Types ¶
type Client ¶
type Client struct { Dialer vconnpool.Dialer //拨号 Home string //Home Addr string //服务器地址 WriteDeadline time.Duration //写入连接超时 ReadDeadline time.Duration //读取连接超时 }
func (*Client) DoCtx ¶
自定义请求(上下文)
ctx context.Context 上下文 req *Request 请求 resp *Response 响应 err error 错误
func (*Client) GetCtx ¶
func (T *Client) GetCtx(ctx context.Context, urlstr string, header Header) (resp *Response, err error)
快速读取(上下文)
ctx context.Context 上下文 urlstr string 网址 header Header 标头 resp *Response 响应 err error 错误
type DotContexter ¶
type DynamicTemplateFunc ¶
type DynamicTemplateFunc func(*ServerHandlerDynamic) DynamicTemplater
type DynamicTemplater ¶
type HandlerFunc ¶
type HandlerFunc func(ResponseWriter, *Request)
处理函数
func (HandlerFunc) ServeIOT ¶
func (T HandlerFunc) ServeIOT(w ResponseWriter, r *Request)
type Hijacker ¶
type Hijacker interface {
Hijack() (net.Conn, *bufio.ReadWriter, error) // 劫持
}
劫持接口
type Home ¶
type Home struct { Sessions *Sessions // 会话集 Global Globaler // Global RootDir func(path string) string // 网站的根目录 Extend interface{} // 接口类型,可以自己存在任何类型 // contains filtered or unexported fields }
Home 家数据存储
type HomeMan ¶
type HomeMan struct {
// contains filtered or unexported fields
}
type HomePool ¶
type HomePool struct {
// contains filtered or unexported fields
}
HomePool 网站池
func NewHomePool ¶
func NewHomePool() *HomePool
func (*HomePool) NewHome ¶
NewHome 创建一个家,如果存在返回已经存在的。Sessions 使用默认的设置,你需要修改它。 默认创建的 Sessions 会话超时为1小时
name string 家name *Home 家
func (*HomePool) SetRecoverSession ¶
SetRecoverSession 设置回收无效的会话。默认为1秒
d time.Duration 回收时间隔,不可以等于或小于0,否则CPU爆增
type Request ¶
type Request struct { Home string // 身份 Method string // 方法 RequestURI string // 请求URL URL *url.URL // 路径 Proto string // 协议,默认IOT/1.1 ProtoMajor int // 协议大版号 ProtoMinor int // 协议小版号 Header Header // 标头 TLS *tls.ConnectionState // TLS RemoteAddr string // 远程IP地址 Close bool // 客户要求一次性连接 // contains filtered or unexported fields }
func ReadRequest ¶
读取请求数据
b io.Reader 需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。 req *Request 请求 err error 错误
func (*Request) RequestConfig ¶
func (T *Request) RequestConfig(nonce string) (riot *RequestConfig, err error)
请求,发往设备的请求
nonce string 编号 riot *RequestConfig 发往设备的请求 err error 错误
type RequestConfig ¶
type RequestConfig struct { Nonce string `json:"nonce"` //-,omitempty,string,number,boolean Proto string `json:"proto"` Method string `json:"method"` Path string `json:"path"` Home string `json:"home"` Header Header `json:"header"` // contains filtered or unexported fields }
iot接收或发送数据格式
func (*RequestConfig) Marshal ¶
func (T *RequestConfig) Marshal() ([]byte, error)
编码,字节末尾追加上一个 \\n 字节
[]byte 编码后的字节 error 错误
func (*RequestConfig) SetBody ¶
func (T *RequestConfig) SetBody(i interface{})
设置主体
i interface{} 主体信息
func (*RequestConfig) Unmarshal ¶
func (T *RequestConfig) Unmarshal(data []byte) error
解码
data []byte 编码后的字节 error 错误
type Response ¶
type Response struct { Status int // 状态码 Header Header // 标头 Body interface{} // 主体 Close bool // 服务器关闭连接 Request *Request // 请求 RemoteAddr string // 远程IP // contains filtered or unexported fields }
响应
func ReadResponse ¶
解析响应
b io.Reader 需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。 res *Response 响应 err error 错误
func (*Response) ResponseConfig ¶
func (T *Response) ResponseConfig(nonce string) (riot *ResponseConfig, err error)
转IOT支持的格式
nonce string 编号 riot *ResponseConfig IOT响应数据格式 err error 错误
type ResponseConfig ¶
type ResponseWriter ¶
type ResponseWriter interface { Header() Header // 标头 Status(int) // 状态 SetBody(interface{}) error // 主体 }
响应写入接口
type RoundTripper ¶
type Route ¶
type Route struct { HandlerError func(w ResponseWriter, r *Request) // contains filtered or unexported fields }
func (*Route) HandleFunc ¶
func (T *Route) HandleFunc(url string, handler func(w ResponseWriter, r *Request))
HandleFunc 绑定处理函数,匹配的网址支持正则,这说明你要严格的检查。
url string 网址,支持正则匹配 handler func(w ResponseWriter, r *Request) 处理函数
func (*Route) ServeIOT ¶
func (T *Route) ServeIOT(w ResponseWriter, r *Request)
ServeIOT 服务IOT
w ResponseWriter 响应 r *Request 请求
type Server ¶
type Server struct { Addr string // 如果空,TCP监听的地址是,“:http” Handler Handler // 如果nil,处理器调用,http.DefaultServeMux BaseContext func(net.Listener) context.Context // 监听上下文 ConnContext func(context.Context, net.Conn) (context.Context, net.Conn, error) // 连接钩子 ConnState func(net.Conn, ConnState) // 每一个连接跟踪 HandlerRequest func(b io.Reader) (req *Request, err error) // 处理请求 HandlerResponse func(b io.Reader) (res *Response, err error) // 处理响应 ErrorLog *log.Logger // 错误?默认是 os.Stderr ReadTimeout time.Duration // 求读取之前,最长期限超时 WriteTimeout time.Duration // 响应写入之前,最大持续时间超时 IdleTimeout time.Duration // 空闲时间,等待用户重新请求 TLSNextProto map[string]func(*Server, *tls.Conn, Handler) // TLS劫持,["v3"]=function(自身, TLS连接, Handler) MaxLineBytes int // 限制读取行数据大小 // contains filtered or unexported fields }
服务器
func (*Server) RegisterOnShutdown ¶
func (T *Server) RegisterOnShutdown(f func())
注册更新事件
f func() 服务下线时调用此函数
type ServerHandlerDynamic ¶
type ServerHandlerDynamic struct { //必须的 RootPath string // 根目录 PagePath string // 主模板文件路径 //可选的 Home *Home // 网站配置 Context context.Context // 上下文 Plus map[string]DynamicTemplateFunc // 支持更动态文件类型 ReadFile func(u *url.URL, filePath string) (io.Reader, time.Time, error) // 读取文件。仅在 .ServeHTTP 方法中使用 ReplaceParse func(name string, p []byte) []byte // 替换解析 // contains filtered or unexported fields }
ServerHandlerDynamic 处理动态页面文件
func (*ServerHandlerDynamic) Execute ¶
func (T *ServerHandlerDynamic) Execute(bufw io.Writer, dock interface{}) (err error)
Execute 执行模板
bufw *bytes.Buffer 模板返回数据 dock interface{} 与模板对接接口 error 错误
func (*ServerHandlerDynamic) Parse ¶
func (T *ServerHandlerDynamic) Parse(r io.Reader) (err error)
Parse 解析模板
r io.Reader 模板内容 error 错误
func (*ServerHandlerDynamic) ParseFile ¶
func (T *ServerHandlerDynamic) ParseFile(path string) error
ParseFile 解析模板
path string 模板文件路径,如果为空,默认使用RootPath,PagePath字段 error 错误
func (*ServerHandlerDynamic) ParseText ¶
func (T *ServerHandlerDynamic) ParseText(name, content string) error
ParseText 解析模板
content, name string 模板内容,模板名称 error 错误
func (*ServerHandlerDynamic) ServeIOT ¶
func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)
ServeIOT 服务IOT
rw ResponseWriter 响应 req *Request 请求
type ServerHandlerDynamicTemplateExtend ¶ added in v2.1.0
这是个额外扩展,由于模板不能实现函数创建,只能在这里构造一个支持创建函数。 在创建的函数内部,需要使用 Args 方法读取参数,使用 Result 方法返回结果。 仅限用于template模板,自定义模板不支持
func (*ServerHandlerDynamicTemplateExtend) Call ¶ added in v2.1.0
func (T *ServerHandlerDynamicTemplateExtend) Call(f func([]reflect.Value) []reflect.Value, args ...interface{}) []interface{}
Call 执行函数
f func([]reflect.Value) []reflect.Value 由NewFunc创建的函数 args ...interface{} 可变参数 []interface{} 返回结果
func (*ServerHandlerDynamicTemplateExtend) ExecuteTemplate ¶ added in v2.1.0
func (T *ServerHandlerDynamicTemplateExtend) ExecuteTemplate(out io.Writer, name string, in interface{}) error
ExecuteTemplate 调用模板
out io.Writer 模板内容返回内容写入到out name string 模板名称 in interface{} 模板点,带外模板的内容 error 执行语法错误
type TemplateDot ¶
type TemplateDot struct { R *Request // 请求 W ResponseWriter // 响应 Home *Home // 家配置 Writed bool // 表示已经调用写入到客户端。这个是只读的 // contains filtered or unexported fields }
模板点
func (*TemplateDot) Context ¶
func (T *TemplateDot) Context() context.Context
Context 上下文
context.Context 上下文
func (*TemplateDot) Defer ¶
func (T *TemplateDot) Defer(call interface{}, args ...interface{}) error
Defer 在用户会话时间过期后,将被调用。
call interface{} 函数 args ... interface{} 参数或更多个函数是函数的参数 error 错误 例: .Defer(fmt.Println, "1", "2") .Defer(fmt.Printf, "%s", "汉字")
func (*TemplateDot) Hijack ¶
func (T *TemplateDot) Hijack() (net.Conn, *bufio.ReadWriter, error)
劫持连接
net.Conn 原连接 *bufio.ReadWriter 读取缓冲 error 错误
func (*TemplateDot) Launch ¶
func (T *TemplateDot) Launch() RoundTripper
Launch 发射数据到设备
RoundTripper 转发
func (*TemplateDot) ResponseWriter ¶
func (T *TemplateDot) ResponseWriter() ResponseWriter
ResponseWriter 数据写入响应,调用这个接口后,模板中的内容就不会显示页客户端去
ResponseWriter 响应
func (*TemplateDot) RootDir ¶
func (T *TemplateDot) RootDir(upath string) string
RootDir 家的根目录
upath string 页面路径 string 根目录
func (*TemplateDot) Session ¶
func (T *TemplateDot) Session(token string) Sessioner
Session 用户的会话缓存
token string 令牌 Sessioner 会话缓存
func (*TemplateDot) WithContext ¶
func (T *TemplateDot) WithContext(ctx context.Context)
WithContext 替换上下文
ctx context.Context 上下文
type TemplateDoter ¶
type TemplateDoter interface { RootDir(path string) string // 家的根目录 Request() *Request // 用户的请求信息 Header() Header // 标头 ResponseWriter() ResponseWriter // 数据写入响应 Launch() RoundTripper // 发射 Hijack() (net.Conn, *bufio.ReadWriter, error) // 劫持 Session(token string) Sessioner // 用户的会话缓存 Global() Globaler // 全站缓存 Swap() *vmap.Map // 信息交换 Defer(call interface{}, args ...interface{}) error // 退回调用 DotContexter // 上下文 }
TemplateDoter 可以在模本中使用的方法