tunnel

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2024 License: MIT, MIT Imports: 5 Imported by: 0

README

go-tunnel

供Go语言使用的全双工TCP隧道。可以用它对接两个TCP连接,使数据在其间透明流动。

特性

  • 支持流量整形
  • 支持加密
  • 自带对象池

基本使用

t := GetTunnel // NewTunnel会自动从对象池中获取元素
t.Flow()       // 数据开始流动,此函数阻塞
t.Close()      // 关闭,这会中断数据的流动
PutTunnel(t)   // 归还Tunne

流量整形

Tunnel.SetLimitor(l go.uber.org/ratelimit.Limiter) // 设置限速器

加密

设置加密解密器

t.SetLeftC(c mycipher.Cipher)
t.SetRightC(c mycipher.Cipher)
// ...

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Flow

func Flow(left, right net.Conn, timeout ...time.Duration) (err error)

Flow 双向流动

func NewVirtualConn

func NewVirtualConn() net.Conn

NewVirtualConn 创建新的虚拟连接

func PutTunnel

func PutTunnel(tunnel *Tunnel)

PutTunnel 将*Tunnel放回TunnelPool

Types

type Tunnel

type Tunnel struct {
	// contains filtered or unexported fields
}

Tunnel 是一个全双工的双向隧道,内置加密解密、暂停等待的控制器。 只能使用GetTunnel方法获取

func GetTunnel

func GetTunnel() *Tunnel

GetTunnel 从Tunnel Pool获取*Tunnel

func (*Tunnel) Clear

func (t *Tunnel) Clear()

Clear 清空Tunnel

func (*Tunnel) Close

func (t *Tunnel) Close() (err error)

Close 关闭Tunnel,关闭前会停止其双向的流动

func (*Tunnel) Closed

func (t *Tunnel) Closed() bool

Closed Tunnel是否已经关闭

func (*Tunnel) Flow

func (t *Tunnel) Flow() (err error)

Flow 开始双向流动 此方法阻塞 同一个Tunnel同时只能执行一次Flow,多次Flow会导致panic

func (*Tunnel) IsNil

func (t *Tunnel) IsNil() bool

IsNil Tunnel的Left和Right都为nil

func (*Tunnel) Left

func (t *Tunnel) Left() net.Conn

Left 左边的连接

func (*Tunnel) ReadLeft

func (t *Tunnel) ReadLeft(b *bytebuffer.ByteBuffer) error

ReadLeft 从左边读取数据

func (*Tunnel) ReadLeftStr

func (t *Tunnel) ReadLeftStr() (text string, err error)

ReadLeftStr 从左边读字符串

func (*Tunnel) ReadRight

func (t *Tunnel) ReadRight(b *bytebuffer.ByteBuffer) error

ReadRight 从右边读取数据

func (*Tunnel) ReadRightStr

func (t *Tunnel) ReadRightStr() (text string, err error)

ReadRightStr 从左边读字符串

func (*Tunnel) Right

func (t *Tunnel) Right() net.Conn

Right 右边的连接

func (*Tunnel) SetBufferSize added in v0.0.2

func (t *Tunnel) SetBufferSize(size int)

SetBufferSize 设置流动缓冲区的 buffer 尺寸

func (*Tunnel) SetLeft

func (t *Tunnel) SetLeft(conn net.Conn)

SetLeft 设置左边

func (*Tunnel) SetReadTimeout

func (t *Tunnel) SetReadTimeout(timeout time.Duration)

SetReadTimeout 设置读超时

func (*Tunnel) SetRight

func (t *Tunnel) SetRight(conn net.Conn)

SetRight 设置右边

func (*Tunnel) SetTimeout

func (t *Tunnel) SetTimeout(timeout time.Duration)

SetTimeout 设置超时

func (*Tunnel) SetWriteTimeout

func (t *Tunnel) SetWriteTimeout(timeout time.Duration)

SetWriteTimeout 设置写超时

func (*Tunnel) WriteLeft

func (t *Tunnel) WriteLeft(b *bytebuffer.ByteBuffer) error

WriteLeft 向左边写数据

func (*Tunnel) WriteLeftStr

func (t *Tunnel) WriteLeftStr(str string) (err error)

WriteLeftStr 向左边写字符串

func (*Tunnel) WriteRight

func (t *Tunnel) WriteRight(b *bytebuffer.ByteBuffer) error

WriteRight 向右边写数据

func (*Tunnel) WriteRightStr

func (t *Tunnel) WriteRightStr(str string) (err error)

WriteRightStr 向右边写字符串

Jump to

Keyboard shortcuts

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