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