viot

package module
v2.5.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2022 License: Apache-2.0 Imports: 36 Imported by: 4

README

viot Build Status

golang viot, 简单的iot服务器。

列表:

const DefaultLineBytes = 1 << 20                                        // 1 MB
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")
    ErrReqUnavailable   = errors.New("Request unavailable")

	ErrHostInvalid   = errors.New("Host invalid")
	ErrURIInvalid    = errors.New("URI invalid")
	ErrProtoInvalid  = errors.New("Proto Invalid")
	ErrMethodInvalid = errors.New("Method Invalid")
)
var (
    ServerContextKey = &contextKey{"iot-server"}                        // 服务器
    LocalAddrContextKey = &contextKey{"local-addr"}                     // 监听地址
)
var TemplateFunc = vweb.TemplateFunc                                    // 模板函数映射
type Session = vweb.Session                                             // 会话
type Sessions = vweb.Sessions                                           // 会话集
type Globaler = vweb.Globaler                                           // 全局会话
type Sessioner = vweb.Sessioner                                         // 会话接口
type SiteMan = vweb.SiteMan                                             // 站点控制
type Site = vweb.Site                                                   // 站点
type Handler interface {                                        // 处理函数接口
    ServeIOT(ResponseWriter, *Request)                                  // 处理
}

type HandlerFunc func(ResponseWriter, *Request)                 // 处理函数
    func (T HandlerFunc) ServeIOT(w ResponseWriter, r *Request)         // 函数
type LogLevel int                                               // 日志
const (
    LogErr LogLevel    = 1 << iota                              // 错误
    LogDebug                                                    // 调试
)
type Server struct {                                            // 服务器
    Addr            string                                              // 如果空,TCP监听的地址是,“:http”
    Handler         Handler                                             // 如果nil,处理器调用
    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
    ErrorLogLevel   LogLevel                                            // 日志错误级别
    ReadTimeout     time.Duration                                       // 求读取之前,最长期限超时
    WriteTimeout    time.Duration                                       // 响应写入之前,最大持续时间超时
    IdleTimeout     time.Duration                                       // 空闲时间,等待用户重新请求
    TLSNextProto    map[string]func(*Server, *tls.Conn, Handler)        // TLS劫持,["v3"]=function(自身, TLS连接, Handler)
    MaxLineBytes    int                                                 // 限制读取行数据大小
}
    func (T *Server) ListenAndServe() error                     // 监听并服务
    func (T *Server) Serve(l net.Listener) error                        // 服务器监听
    func (T *Server) Close() error                                      // 关闭服务器
    func (T *Server) Shutdown(ctx context.Context) error                // 关闭服务器,等待连接完成
    func (T *Server) RegisterOnShutdown(f func())                       // 注册更新事件
    func (T *Server) SetKeepAlivesEnabled(v bool)                       // 设置长连接开启
type Header map[string]string                                   // 标头
    func (h Header) Set(key, value string)                              // 设置
    func (h Header) Get(key string) string                              // 读取
    func (h Header) Del(key string)                                     // 删除
    func (h Header) Clone() Header                                      // 克隆
func ParseIOTVersion(vers string) (major, minor int, ok bool)           // 解析IOT请求版本
func ReadRequest(b io.Reader) (req *Request, err error)                 // 读取请求数据
func ReadResponse(r io.Reader, req *Request) (res *Response, err error) // 读取响应数据
func Nonce() (nonce string, err error)                                  // 生成编号
func Error(w ResponseWriter, err string, code int)                      // 快速设置错误
type RequestConfig struct{                                         // iot接收或发送数据格式
    Nonce   string          `json:"nonce"`//-,omitempty,string,number,boolean
    Proto   string          `json:"proto"`
    Method  string          `json:"method"`
    Path    string          `json:"path"`
    Host    string          `json:"host"`
    Header  Header          `json:"header"`
}
    func (T *RequestConfig) SetBody(i interface{})                          // 设置主体
    func (T *RequestConfig) GetBody() interface{}                           // 读取主体
    func (T *RequestConfig) Marshal() ([]byte, error)                       // 编码
    func (T *RequestConfig) Unmarshal(data []byte) error                    // 解码
type Request struct {                                               // 请求
    Host        string                                                      // 身份
    Method      string                                                      // 方法
    RequestURI  string                                                      // 请求URL
    URL         *url.URL                                                    // 路径
    Proto       string                                                      // 协议
    ProtoMajor  int                                                         // 协议大版号
    ProtoMinor  int                                                         // 协议小版号
    Header      Header                                                      // 标头
    TLS         *tls.ConnectionState                                        // TLS
    RemoteAddr string                                                       // 远程IP地址
    Close       bool                                                        // 客户要求一次性连接
}
    func (T *Request) GetNonce() string                                     // 读取编号
    func (T *Request) GetBody(i interface{}) error                          // 读取主体
    func (T *Request) SetBody(i interface{}) error                          // 设置主体
    func (T *Request) ProtoAtLeast(major, minor int) bool                   // 判断版本号
    func (T *Request) Context() context.Context                             // 读取上下文
    func (T *Request) WithContext(ctx context.Context) *Request             // 替换上下文
    func (T *Request) GetBasicAuth() (username, password string, ok bool)   // 基本验证
    func (T *Request) SetBasicAuth(username, password string)               // 设置基本验证
    func (T *Request) GetTokenAuth() (token string, ok bool)                // token验证
    func (T *Request) SetTokenAuth(token string)                            // 设置token验证
    func (T *Request) RequestConfig(nonce string) (riot *RequestConfig, err error)// 请求,发往设备的请求
type ResponseConfig struct{
    Nonce     string                         `json:"nonce"`
    Status    int                            `json:"status"`
    Header     Header                        `json:"header"`
    Body     interface{}                     `json:"body,omitempty"`
}
type Response struct{                                                   // 响应
    Status     int                                                          // 状态码
    Header     Header                                                       // 标头
    Body       interface{}                                                  // 主体
    Close      bool                                                         // 服务器关闭连接
    Request    *Request                                                     // 请求
    RemoteAddr string                                                       // 远程IP
}
    func (T *Response) SetNonce(n string)                                   // 设置编号
    func (T *Response) WriteAt(w ResponseWriter)                            // 写入到
    func (T *Response) WriteTo(w io.Writer) error                           // 写入w
    func (T *Response) ResponseConfig(nonce string) (riot *ResponseConfig, err error)// 响应,接收设备的响应
type ResponseWriter interface {                                         // 响应写入接口
    Header() Header                                                         // 标头
    Status(int)                                                             // 状态
    SetBody(interface{}) error                                              // 主体
}
type Hijacker interface {                                               // 劫持接口
    Hijack() (net.Conn, *bufio.ReadWriter, error)                           // 劫持
}
type CloseNotifier interface {                                          // 连接关闭通知接口
    CloseNotify() <-chan error                                               // 关闭通知
}
type Launcher interface{}{                                              // 发射,服务器使用当前连接作为客户端给智能设置发送信息
    Launch() RoundTripper                                                   // 发射
}
 type Flusher interface {                                               //缓冲
    Flush()                                                                 // 刷新缓冲
}
type RoundTripper interface {                                           // 执行一个单一的IOT事务
    RoundTrip(*Request) (*Response, error)                                  // 单一的IOT请求
    RoundTripContext(ctx context.Context, req *Request) (resp *Response, err error)    // 单一的IOT请求(上下文)
}
type RawControler interface{                                            //源控制,用于临时处理原始数据
    RawControl(f func(net.Conn, *bufio.Reader) error)                       // 返回错误关闭连接
}
type Route struct{                                                          // 路由
    HandlerError    func(w ResponseWriter, r *Request)                          // 处理错误的请求
}
    func (T *Route) HandleFunc(url string,  handler func(w ResponseWriter, r *Request))    // 增加函数
var DefaultSitePool    = NewSitePool()                                      // 默认站点
type SitePool struct {                                                      // 站点池
    *vweb.SitePool                                                              // 嵌入站点
}
    func NewSitePool() *SitePool                                                // 新建
type TemplateDot struct {                                                   // 模板点
    R        *Request                                                           // 请求
    W        ResponseWriter                                                     // 响应
    Site     *Site                                                              // 站点配置
    Writed   bool                                                               // 表示已经调用写入到客户端。这个是只读的
}
    func (T *TemplateDot) Defer(call interface{}, args ...interface{}) error    // 退同调用
    func (T *TemplateDot) Free()                                                // 释放Defer
    func (T *TemplateDot) Global() Globaler                                     // 全站缓存
    func (T *TemplateDot) Header() Header                                       // 标头
    func (T *TemplateDot) Request() *Request                                    // 请求的信息
    func (T *TemplateDot) ResponseWriter() ResponseWriter                       // 数据写入响应
    func (T *TemplateDot) Launch() RoundTripper                                 // 发射
    func (T *TemplateDot) Hijack() (net.Conn, *bufio.ReadWriter, error)         // 劫持
    func (T *TemplateDot) RootDir(upath string) string                          // 站点的根目录
    func (T *TemplateDot) Session() Sessioner                                   // 用户的会话
    func (T *TemplateDot) Swap() *vmap.Map                                      // 信息交换
    func (T *TemplateDot) Context() context.Context                             // 上下文
    func (T *TemplateDot) WithContext(ctx context.Context)                      // 替换上下文
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                                                                // 点上下文
}
type DotContexter interface {                                               // 点上下文
    Context() context.Context                                                   // 上下文
    WithContext(ctx context.Context)                                            // 替换上下文
}
type DynamicTemplater interface {                                           // 动态模板
    SetPath(rootPath, pagePath string)                                          // 设置路径
    Parse(r io.Reader) (err error)                                              // 解析
    Execute(out io.Writer, dot interface{}) error                               // 执行
}
type DynamicTemplateFunc func(*ServerHandlerDynamic) DynamicTemplater           // 动态模板方法
type ServerHandlerDynamic struct {                                          // 动态
    //必须的
    RootPath string                                                             // 根目录
    PagePath string                                                             // 主模板文件路径

    //可选的
    Site     *Site                                                              // 站点配置
    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                                  // 替换解析
}
    func (T *ServerHandlerDynamic) Execute(bufw io.Writer, dock interface{}) (err error)        // 执行模板
    func (T *ServerHandlerDynamic) Parse(bufr io.Reader) (err error)                            // 解析模板
    func (T *ServerHandlerDynamic) ParseFile(path string) error                                 // 解析模板文件
    func (T *ServerHandlerDynamic) ParseText(content, name string) error                        // 解析模板文本
    func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)                    // 服务IOT
type Client struct{                                                             // 客户端
    Dialer              vconnpool.Dialer                                            // 拨号
    Host                string                                                      // Host
    Addr                string                                                      // 服务器地址
    WriteDeadline       time.Duration                                               // 写入连接超时
    ReadDeadline        time.Duration                                               // 读取连接超时
}
    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) Do(req *Request) (resp *Response, err error)                                           // 自定义请求
    func (T *Client) DoCtx(ctx context.Context, req *Request)(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{})           // 快速提交(上下文)

Documentation

Index

Constants

View Source
const DefaultLineBytes = 1 << 20 // 1 MB

默认读取数据行大小

Variables

View Source
var (
	ErrBodyNotAllowed  = errors.New("viot: The request method or status code is not allowed")
	ErrGetBodyed       = errors.New("viot: Does not support repeated reading of body")
	ErrHijacked        = errors.New("viot: Connection has been hijacked")
	ErrLaunched        = errors.New("viot: The connection is waiting for the response of the active request")
	ErrRwaControl      = errors.New("viot: Processing the original data")
	ErrAbortHandler    = errors.New("viot: Abort processing")
	ErrServerClosed    = errors.New("viot: Server is down")
	ErrDoned           = errors.New("viot: Has been completed")
	ErrConnClose       = errors.New("viot: Device connection is closed")
	ErrReqUnavailable  = errors.New("viot: Request unavailable")
	ErrRespUnavailable = errors.New("viot: Response unavailable")
	ErrRespNonce       = errors.New("viot: Response nonce not recognized")

	ErrHostInvalid   = errors.New("host invalid")
	ErrURIInvalid    = errors.New("URI invalid")
	ErrProtoInvalid  = errors.New("proto Invalid")
	ErrMethodInvalid = errors.New("method Invalid")
)
View Source
var (
	LocalAddrContextKey = &contextKey{"iot-localAddr"}
	ListenerContextKey  = &contextKey{"iot-listener"}
	ConnContextKey      = &contextKey{"iot-conn"}
	ServerContextKey    = &contextKey{"iot-server"}
	SiteContextKey      = &contextKey{"iot-site"}
)

上下文中使用的key

View Source
var DefaultSitePool = NewSitePool() // 池(默认)

Functions

func Error

func Error(w ResponseWriter, err string, code int)

快速设置错误

w ResponseWriter	响应
err string			错误字符串
code int			错误代码

func Nonce

func Nonce() (nonce string, err error)

生成编号

nonce string	编号
err error		错误

func ParseIOTVersion

func ParseIOTVersion(vers string) (major, minor int, ok bool)

解析IOT请求版本

vers string			版本字符串
major, minor int	大版号,小版号
ok bool				true版本正确解析,否则失败

Types

type Client

type Client struct {
	Dialer        vconnpool.Dialer // 拨号
	Host          string           // Host
	Addr          string           // 服务器地址
	WriteDeadline time.Duration    // 写入连接超时
	ReadDeadline  time.Duration    // 读取连接超时
	Parser        Parser           // 自定义解析接口
}

func (*Client) Do

func (T *Client) Do(req *Request) (resp *Response, err error)

自定义请求

req *Request			请求
resp *Response			响应
err error				错误

func (*Client) DoCtx

func (T *Client) DoCtx(ctx context.Context, req *Request) (resp *Response, err error)

自定义请求(上下文)

ctx context.Context		上下文
req *Request			请求
resp *Response			响应
err error				错误

func (*Client) Get

func (T *Client) Get(url string, header Header) (resp *Response, err error)

快速读取

url string		网址
header Header	标头
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				错误

func (*Client) Post

func (T *Client) Post(url string, header Header, body interface{}) (resp *Response, err error)

快速提交

url string				网址
header Header			标头
body interface{}		主体
resp *Response			响应
err error				错误

func (*Client) PostCtx

func (T *Client) PostCtx(ctx context.Context, urlstr string, header Header, body interface{}) (resp *Response, err error)

快速提交(上下文)

ctx context.Context		上下文
urlstr string			网址
header Header			标头
body interface{}		主体
resp *Response			响应
err error				错误

type CloseNotifier

type CloseNotifier interface {
	CloseNotify() <-chan error // 关闭通知
}

连接关闭通知接口

type ConnState

type ConnState int
const (
	StateNew ConnState = iota
	StateActive
	StateIdle
	StateHijacked
	StateClosed
)

func (ConnState) String

func (c ConnState) String() string

type DotContexter

type DotContexter interface {
	Context() context.Context        // 上下文
	WithContext(ctx context.Context) // 替换上下文
}

type DynamicTemplateFunc

type DynamicTemplateFunc func(*ServerHandlerDynamic) DynamicTemplater

type DynamicTemplater

type DynamicTemplater interface {
	SetPath(rootPath, pagePath string)            // 设置路径
	Parse(r io.Reader) (err error)                // 解析
	Execute(out io.Writer, dot interface{}) error // 执行
}

type Flusher added in v2.3.0

type Flusher interface {
	Flush() // 刷新缓冲
}

缓冲

type Globaler

type Globaler = vweb.Globaler

type Handler

type Handler interface {
	ServeIOT(ResponseWriter, *Request)
}

处理函数接口

type HandlerFunc

type HandlerFunc func(ResponseWriter, *Request)

处理函数

func (HandlerFunc) ServeIOT

func (T HandlerFunc) ServeIOT(w ResponseWriter, r *Request)
type Header map[string]string

标头

func (Header) Clone

func (h Header) Clone() Header

克隆

func (Header) Del

func (h Header) Del(key string)

删除

key string	键

func (Header) Get

func (h Header) Get(key string) string

读取

key string	键
string		值

func (Header) Set

func (h Header) Set(key, value string)

设置

key, value string	键,值

type Hijacker

type Hijacker interface {
	Hijack() (net.Conn, *bufio.ReadWriter, error) // 劫持
}

劫持接口

type Launcher

type Launcher interface {
	Launch() RoundTripper
}

发射,服务器使用当前连接作为客户端给智能设置发送信息

type LogLevel added in v2.3.0

type LogLevel int
const (
	LogNone  LogLevel = 1 << iota // 1
	LogErr                        // 2
	LogDebug                      // 4
)

type Parser added in v2.5.0

type Parser interface {
	Request([]byte) (*Request, error)     // binary转请求
	Response([]byte) (*Response, error)   // binary转响应
	Unrequest(*Request) ([]byte, error)   // 请求转binary
	Unresponse(*Response) ([]byte, error) // 响应转binary
}

type RawControler added in v2.3.0

type RawControler interface {
	RawControl(func(c net.Conn, r *bufio.Reader) error) // 返回错误关闭连接
}

源控制,用于临时处理原始数据

type Request

type Request struct {
	Host       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 NewRequest added in v2.3.0

func NewRequest(method, url string, body interface{}) (*Request, error)

新的请求

method, url string		方法,地址(viot://host/path)
body interface{}		数据
*Request, error			请求,错误

func NewRequestWithContext added in v2.3.0

func NewRequestWithContext(ctx context.Context, method, urlStr string, body interface{}) (*Request, error)

新的请求

ctx context.Context		上下文
method, urlStr string	方法,地址(viot://host/path)
body interface{}		数据
*Request, error			请求,错误

func ReadRequest

func ReadRequest(b io.Reader) (req *Request, err error)

读取请求数据

b io.Reader		需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。
req *Request	请求
err error		错误

func (*Request) Config added in v2.5.0

func (T *Request) Config(nonce string) (rc *RequestConfig, err error)

请求,发往设备的请求

nonce string		编号
riot *RequestConfig	发往设备的请求
err error			错误

func (*Request) Context

func (T *Request) Context() context.Context

读取上下文

context.Context	上下文

func (*Request) GetBasicAuth

func (T *Request) GetBasicAuth() (username, password string, ok bool)

基本验证

username, password string	用户名,密码
ok bool						如果有用户名或密码

func (*Request) GetBody

func (T *Request) GetBody(i interface{}) error

读取主体

i interface{}	数据写入这里
error			错误

func (*Request) GetNonce

func (T *Request) GetNonce() string

读取编号

string	请求编号

func (*Request) GetTokenAuth

func (T *Request) GetTokenAuth() string

token验证

token string	令牌

func (*Request) Marshal added in v2.5.0

func (T *Request) Marshal() ([]byte, error)

封装RequestConfig.Marshal

func (*Request) ProtoAtLeast

func (T *Request) ProtoAtLeast(major, minor int) bool

判断版本号

func (*Request) SetBasicAuth

func (T *Request) SetBasicAuth(username, password string)

设置基本验证

username, password string	用户名,密码

func (*Request) SetBody

func (T *Request) SetBody(i interface{}) error

设置主体

i interface{}	数据写入这里
error			错误

func (*Request) SetTokenAuth

func (T *Request) SetTokenAuth(token string)

设置token验证

token string	令牌

func (*Request) WithContext

func (T *Request) WithContext(ctx context.Context) *Request

替换上下文

ctx context.Context	上下文
*Request			请求

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"`
	Host   string `json:"host"`
	Header Header `json:"header"`
	// contains filtered or unexported fields
}

iot接收或发送数据格式

func (*RequestConfig) GetBody

func (T *RequestConfig) GetBody() interface{}

读取主体

interface{}		主体信息

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    // 请求
	// contains filtered or unexported fields
}

响应

func ReadResponse

func ReadResponse(r io.Reader, req *Request) (res *Response, err error)

解析响应

b io.Reader		需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。
res *Response	响应
err error		错误

func (*Response) Config added in v2.5.0

func (T *Response) Config(nonce string) (rc *ResponseConfig, err error)

转IOT支持的格式

nonce string		编号
riot *ResponseConfig	IOT响应数据格式
err error			错误

func (*Response) Marshal added in v2.5.0

func (T *Response) Marshal() ([]byte, error)

封装 ResponseConfig.Marshal

func (*Response) SetNonce

func (T *Response) SetNonce(n string)

设置响应编号

n string	编号

func (*Response) WriteAt added in v2.3.0

func (T *Response) WriteAt(w ResponseWriter)

写入到

w ResponseWriter	T响应写w

func (*Response) WriteTo

func (T *Response) WriteTo(w io.Writer) (int64, error)

写入w

w io.Writer		T响应写w

type ResponseConfig

type ResponseConfig struct {
	Nonce  string      `json:"nonce"` //-,omitempty,string,number,boolean
	Status int         `json:"status"`
	Header Header      `json:"header"`
	Body   interface{} `json:"body,omitempty"`
}

func (*ResponseConfig) Marshal added in v2.3.0

func (T *ResponseConfig) Marshal() ([]byte, error)

编码,字节末尾追加上一个 \\n 字节

[]byte			编码后的字节
error			错误

type ResponseWriter

type ResponseWriter interface {
	Header() Header            // 标头
	Status(int)                // 状态
	SetBody(interface{}) error // 主体
}

响应写入接口

type RoundTripper

type RoundTripper interface {
	RoundTrip(*Request) (*Response, error)                                          // 单一的HTTP请求
	RoundTripContext(ctx context.Context, req *Request) (resp *Response, err error) // 单一的HTTP请求(上下文)
}

type Route

type Route struct {
	HandlerError HandlerFunc
	// 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          请求

func (*Route) SetSiteMan added in v2.3.5

func (T *Route) SetSiteMan(siteMan *SiteMan)

SetSiteMan 设置站点管理,将会携带在请求上下文中 siteMan *SiteMan 站点

type Server

type Server struct {
	Addr          string                                                             // 如果空,TCP监听的地址是,“:8000”
	Handler       Handler                                                            // 如果nil,没有调用
	Parser        Parser                                                             // 自定义解析
	BaseContext   func(net.Listener) context.Context                                 // 监听上下文
	ConnContext   func(context.Context, net.Conn) (context.Context, net.Conn, error) // 连接钩子
	ConnState     func(net.Conn, ConnState)                                          // 每一个连接跟踪
	ErrorLog      *log.Logger                                                        // 错误?默认是 os.Stderr
	ErrorLogLevel LogLevel                                                           // 日志错误级别
	ReadTimeout   time.Duration                                                      // 求读取之前,最长期限超时
	WriteTimeout  time.Duration                                                      // 响应写入之前,最大持续时间超时
	IdleTimeout   time.Duration                                                      // 空闲时间,等待用户重新请求
	TLSConfig     *tls.Config                                                        // 可选配置TLS,用于ListenAndServeTLS
	TLSNextProto  map[string]func(*Server, *tls.Conn, Handler)                       // TLS劫持,["v3"]=function(自身, TLS连接, Handler)
	MaxLineBytes  int                                                                // 限制读取行数据大小
	// contains filtered or unexported fields
}

服务器

func (*Server) Close

func (T *Server) Close() error

关闭服务器

error			错误

func (*Server) ListenAndServe

func (T *Server) ListenAndServe() error

服务器监听,监听地址可以设置Addr。默认为"",则是8000

error			错误

func (*Server) RegisterOnShutdown

func (T *Server) RegisterOnShutdown(f func())

注册更新事件

f func()		服务下线时调用此函数

func (*Server) Serve

func (T *Server) Serve(l net.Listener) error

服务器监听

l net.Listener	监听
error			错误

func (*Server) ServeTLS added in v2.5.0

func (T *Server) ServeTLS(l net.Listener, certFile, keyFile string) error

服务器监听TLS

l net.Listener				监听
certFile, keyFile string	证书公钥,私钥
error						错误

func (*Server) SetKeepAlivesEnabled

func (T *Server) SetKeepAlivesEnabled(v bool)

设置长连接开启

v bool			设置支持长连接

func (*Server) Shutdown

func (T *Server) Shutdown(ctx context.Context) error

关闭,等待连接完成

ctx context.Context	上下文
error				错误

type ServerHandlerDynamic

type ServerHandlerDynamic struct {
	// 必须的
	RootPath string // 根目录
	PagePath string // 主模板文件路径

	// 可选的
	Site         *Site                                                           // 网站配置
	Context      context.Context                                                 // 上下文
	Module       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 解析模板

name, content string	模板名称, 模板内容
error					错误

func (*ServerHandlerDynamic) ServeIOT

func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)

ServeIOT 服务IOT

rw ResponseWriter    响应
req *Request         请求

type Session

type Session = vweb.Session

type Sessioner

type Sessioner = vweb.Sessioner

type Sessions

type Sessions = vweb.Sessions

type SetParser added in v2.5.0

type SetParser interface {
	SetParse(p Parser)
}

源转换解析

type Site added in v2.3.0

type Site = vweb.Site

type SiteMan added in v2.3.0

type SiteMan = vweb.SiteMan

type SitePool added in v2.3.0

type SitePool struct {
	*vweb.SitePool
}

SitePool 网站池

func NewSitePool added in v2.3.0

func NewSitePool() *SitePool

func (*SitePool) NewSite added in v2.3.0

func (T *SitePool) NewSite(name string) *Site

NewSite 创建一个站点,如果存在返回已经存在的。Sessions 使用默认的设置,你需要修改它。 默认创建的 Sessions 会话超时为1小时

name string		站点name
*Site			站点

type TemplateDot

type TemplateDot struct {
	R      *Request       // 请求
	W      ResponseWriter // 响应
	Site   *Site          // 站点配置
	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) Free

func (T *TemplateDot) Free()

Free 释放Defer

func (*TemplateDot) Global

func (T *TemplateDot) Global() Globaler

Global 全站缓存

Globaler	公共缓存

func (*TemplateDot) Header

func (T *TemplateDot) Header() Header

Header 标头

Header   响应标头

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) Request

func (T *TemplateDot) Request() *Request

Request 用户的请求信息

*Request 请求

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) Swap

func (T *TemplateDot) Swap() *vmap.Map

Swap 信息交换

Swaper  映射

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 可以在模本中使用的方法

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL