lnet
v2.0
แต่ละเลเยอร์จะกำหนดอินเทอร์เฟซแบบนามธรรม ตราบใดที่มีการใช้อินเทอร์เฟซที่สอดคล้องกัน แต่ละเลเยอร์ก็สามารถขยายได้อย่างง่ายดาย แต่ละอินเทอร์เฟซจัดเตรียมการใช้งานคลาสพื้นฐาน ซึ่งคุณสามารถสืบทอดและแทนที่วิธีที่คุณต้องการแก้ไขได้
Transport layer มีหน้าที่รับผิดชอบฟังก์ชันที่เกี่ยวข้องกับเครือข่ายและปัจจุบันรองรับ TCP และ 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
}
ชั้นโปรโตคอลมีหน้าที่รับผิดชอบในการวิเคราะห์โปรโตคอลและปัจจุบันรองรับโปรโตคอลการเข้ารหัส ProtoBuff และ Gob
type IProtocol interface {
Marshal ( msg interface {}) ([] byte , error )
Unmarshal ( data [] byte , v interface {}) error
}
MsgHandle layer มีหน้าที่กระจายข้อความ
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 )
}
หากต้องการสร้างบริการ คุณจะต้องรวมโครงสร้างสามระดับข้างต้นเพื่อปรับแต่งบริการที่ต้องการ
//服务器逻辑
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 )
}
}