lnet
v2.0
Каждый уровень определяет абстрактный интерфейс. Если соответствующий интерфейс реализован, каждый уровень можно легко расширить. Каждый интерфейс предоставляет реализацию базового класса, которую вы можете унаследовать, а затем переопределить методы, которые хотите изменить.
Транспортный уровень отвечает за сетевые функции и в настоящее время поддерживает 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 отвечает за распространение сообщений.
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 )
}
}