lnet
v2.0
Setiap lapisan mendefinisikan antarmuka abstrak. Selama antarmuka yang sesuai diterapkan, setiap lapisan dapat dengan mudah diperluas. Setiap antarmuka menyediakan implementasi kelas dasar, yang dapat Anda warisi dan kemudian ganti metode yang ingin Anda modifikasi.
Lapisan Transport bertanggung jawab atas fungsi terkait jaringan dan saat ini mendukung TCP dan WebSocket.
type ITransport interface {
GetId () uint32
GetLocalAddr () string
GetRemoteAddr () string
Listen () error
Connect () error
OnNewConnect ( transport ITransport )
Read ()
Write ()
Send ( msgPkg IMessagePackage ) error
Close ()
OnClosed ()
IsStop () bool
IsTimeout ( tick * time. Timer ) bool
}
Lapisan Protokol bertanggung jawab untuk analisis protokol dan saat ini mendukung protokol pengkodean ProtoBuff dan Gob.
type IProtocol interface {
Marshal ( msg interface {}) ([] byte , error )
Unmarshal ( data [] byte , v interface {}) error
}
Lapisan MsgHandle bertanggung jawab untuk distribusi pesan
type IMsgHandle interface {
RegisterMsg ( tag uint32 , msg interface {})
NewMsg ( tag uint32 ) interface {}
GetMsgTag ( msg interface {}) uint32
SetProtocol ( protocol IProtocol )
GetProtocol () IProtocol
CreateMessage ( msgPkg IMessagePackage ) interface {}
CreateMessagePackage ( msg interface {}) IMessagePackage
Process ( transport ITransport , msgPackage IMessagePackage )
SetOnTransportClose ( f func ( transport ITransport ))
OnTransportClose ( transport ITransport )
}
Untuk membangun sebuah layanan, Anda hanya perlu menggabungkan tiga tingkat struktur di atas untuk menyesuaikan layanan yang diperlukan.
//服务器逻辑
func serverStart () {
//选择协议
protocol := & lprotocol. PbProtocol {}
//选择消息处理函数
msgHandle := lmsghandle . NewBaseMsgHandle ( protocol )
//注册消息
msgHandle . RegisterMsg ( 12 , pb. GameItem {})
msgHandle . RegisterMsg ( 13 , pb. RpcReqData {})
msgHandle . RegisterMsg ( 14 , pb. RpcRspData {})
//启动服务
server := lserver . NewTcpServer ( "127.0.0.1:9000" , msgHandle )
server . Start ()
}
//客户端逻辑
func clientStart () {
//选择协议
protocol := & lprotocol. PbProtocol {}
//选择消息处理函数
msgHandle := lmsghandle . NewBaseMsgHandle ( protocol )
//注册消息
msgHandle . RegisterMsg ( 12 , pb. GameItem {})
msgHandle . RegisterMsg ( 13 , pb. RpcReqData {})
msgHandle . RegisterMsg ( 14 , pb. RpcRspData {})
client := lclient . NewTcpClient ( "127.0.0.1:9000" , msgHandle )
client . Connect ()
msg := & pb. GameItem { Id : 1 , Type : 2 , Count : 3 }
for {
client . Send ( msg )
time . Sleep ( 1 * time . Second )
}
}