github.com/nyan233/littlerpc@v0.4.6-0.20230316182519-0c8d5c48abaf/core/common/transport/transport.go (about)

     1  package transport
     2  
     3  import (
     4  	"github.com/nyan233/littlerpc/core/protocol/message/mux"
     5  	"net"
     6  )
     7  
     8  const (
     9  	ReadBufferSize     = mux.MaxBlockSize
    10  	MaxWriteBufferSize = 1024 * 1024
    11  )
    12  
    13  type ServerEngine interface {
    14  	Start() error
    15  	Stop() error
    16  }
    17  
    18  type ClientEngine interface {
    19  	Start() error
    20  	Stop() error
    21  	NewConn(NetworkClientConfig) (ConnAdapter, error)
    22  }
    23  
    24  // ConnAdapter
    25  // 这个接口定义的实现应该是线程安全的, 可以安全地被多个goroutine共享
    26  // 而且其指针不应该随便变动, 至少在OnClose()完成调用之前不可以变动
    27  // 接口中的方法应该是Sync style, 即方法执行完成后所有任务均已完成, 比如Read()为非
    28  // 阻塞接口的话则不满足要求, 需要实现传输层的框架提供一个Sync style的封装, 否则则会串包
    29  type ConnAdapter interface {
    30  	// SetSource Source主要用于server/client将连接的相关资源
    31  	// 比如: parser/writer/buffer等附加到conn中, 可以降低map查找的开销
    32  	SetSource(s interface{})
    33  	Source() interface{}
    34  	// Close 不管因为何种原因导致了连接被关闭, ServerTransportBuilder设置的OnClose
    35  	// 应该被调用, 从而让LittleRpc能够清理残余数据
    36  	Close() error
    37  	// Conn 其它的接口遵循net.Conn的定义
    38  	net.Conn
    39  }
    40  
    41  type ServerBuilder interface {
    42  	Server() ServerEngine
    43  	EventDriveInter() EventDriveInter
    44  }
    45  
    46  type ClientBuilder interface {
    47  	Client() ClientEngine
    48  	EventDriveInter() EventDriveInter
    49  }
    50  
    51  // EventDriveInter 适用于Client&Server的事件驱动接口
    52  type EventDriveInter interface {
    53  	OnRead(func(conn ConnAdapter))
    54  	OnMessage(func(conn ConnAdapter, data []byte))
    55  	OnOpen(func(conn ConnAdapter))
    56  	OnClose(func(conn ConnAdapter, err error))
    57  }
    58  
    59  type NewServerBuilder func(NetworkServerConfig) ServerBuilder
    60  
    61  type NewClientBuilder func() ClientBuilder