Documentation ¶
Index ¶
- func ContextWithInterceptor(ctx context.Context, its ...*Interceptor) context.Context
- func NewWithContext(ctx context.Context, conn net.Conn) net.Conn
- func OriginConn(conn net.Conn) net.Conn
- func RawListener(l net.Listener) net.Listener
- func RegisterInterceptor(its ...*Interceptor)
- func Service(c Info) any
- func WithInterceptor(c net.Conn, its ...*Interceptor) net.Conn
- func WithService(service any, c net.Conn) net.Conn
- type Copy
- type HasRaw
- type HasService
- type Info
- type Interceptor
- type Listener
- type ReadTracer
- type StreamConn
- type WriteTracer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ContextWithInterceptor ¶
func ContextWithInterceptor(ctx context.Context, its ...*Interceptor) context.Context
ContextWithInterceptor set connWithIt interceptor to context
func NewWithContext ¶
NewWithContext 取出 ctx 里的 Interceptor, 并对 conn 进行封装
func RegisterInterceptor ¶
func RegisterInterceptor(its ...*Interceptor)
RegisterInterceptor 注册全局的 Interceptor 会在通过 ctx 注册的之前执行
func WithInterceptor ¶
func WithInterceptor(c net.Conn, its ...*Interceptor) net.Conn
WithInterceptor wrap connWithIt with Interceptor its 将倒序执行:后注册的先执行
Types ¶
type Copy ¶
type Copy struct { // ReadTo 将 Read 到的数据写入此处,比如 os.Stdout ReadTo io.Writer // WriterTo 将 Writer 的数据写入此处,比如 os.Stdout WriterTo io.Writer // contains filtered or unexported fields }
Copy 实现对网络连接读写数据的复制
func (*Copy) EnableWrite ¶
EnableWrite 设置是否允许 copy write 流量
type Interceptor ¶
type Interceptor struct { Read func(info Info, b []byte, invoker func([]byte) (int, error)) (int, error) AfterRead func(info Info, b []byte, readSize int, err error) Write func(info Info, b []byte, invoker func([]byte) (int, error)) (int, error) AfterWrite func(info Info, b []byte, wroteSize int, err error) Close func(info Info, invoker func() error) error AfterClose func(info Info, err error) LocalAddr func(info Info, invoker func() net.Addr) net.Addr RemoteAddr func(info Info, invoker func() net.Addr) net.Addr SetDeadline func(info Info, tm time.Time, invoker func(tm time.Time) error) error AfterSetDeadline func(info Info, tm time.Time, err error) SetReadDeadline func(info Info, tm time.Time, invoker func(tm time.Time) error) error AfterSetReadDeadline func(info Info, tm time.Time, err error) SetWriteDeadline func(info Info, tm time.Time, invoker func(tm time.Time) error) error AfterSetWriteDeadline func(info Info, tm time.Time, err error) }
Interceptor for net.Conn
func InterceptorsFromContext ¶
func InterceptorsFromContext(ctx context.Context) []*Interceptor
InterceptorsFromContext get connWithIt ConnInterceptors from context
type Listener ¶
type Listener struct { net.Listener AfterAccepts []func(conn net.Conn) (net.Conn, error) AcceptTimeout time.Duration // contains filtered or unexported fields }
Listener 支持自定义回调的 Listener
func (*Listener) RawListener ¶
RawListener 返回当前对象的底层 Listener
type ReadTracer ¶
type ReadTracer struct {
// contains filtered or unexported fields
}
ReadTracer 获取所有通过 Read 方法读取的数据的副本
func (*ReadTracer) ConnInterceptor ¶
func (ch *ReadTracer) ConnInterceptor() *Interceptor
ConnInterceptor 获取 Interceptor 实例
type StreamConn ¶
type StreamConn struct { // Addr 要连接的网络地址,必填 Addr net.Addr // Logger 可选,打印日志的 writer Logger io.Writer // Dial 可选,拨号函数 Dial func(ctx context.Context, addr net.Addr) (net.Conn, error) // Wrap 可选 Wrap func(conn net.Conn) net.Conn // DialTimeout 拨号超时时间,可选,默认为 3s DialTimeout time.Duration // Retry 可选,重试次数,默认为 0 (不重试) // -1 :无限重试 Retry int // RetryWait 可选,重试等待间隔时间 // 默认值为 1s RetryWait time.Duration // contains filtered or unexported fields }
StreamConn 一个总是保持连接的 WriterReader
func (*StreamConn) Close ¶
func (sc *StreamConn) Close() error
type WriteTracer ¶
type WriteTracer struct {
// contains filtered or unexported fields
}
WriteTracer 获取所有通过 Write 方法写出的数据的副本
func (*WriteTracer) Interceptor ¶
func (ch *WriteTracer) Interceptor() *Interceptor
Interceptor 获取 Interceptor 实例
func (*WriteTracer) WriteBytes ¶
func (ch *WriteTracer) WriteBytes() []byte
WriteBytes Write 方法写出的数据的副本
Click to show internal directories.
Click to hide internal directories.