zhengtao b20bfb08e7 new 10 mesi fa
..
README.md b20bfb08e7 new 10 mesi fa
actor.go b20bfb08e7 new 10 mesi fa
actor_base.go b20bfb08e7 new 10 mesi fa
agent.go b20bfb08e7 new 10 mesi fa
agents.go b20bfb08e7 new 10 mesi fa
define.go b20bfb08e7 new 10 mesi fa
message.go b20bfb08e7 new 10 mesi fa
route.go b20bfb08e7 new 10 mesi fa
simple_test.go b20bfb08e7 new 10 mesi fa

README.md

简单化版的网络数据包解析实现

  • 起因是网友@刘在Q群中反馈,需要一个更简单的网络数据包结构。
  • 本结构只是一个自定义网络数据包的演示。在实际开发中各位可根据自身需求进行定制。
  • 代码未做详细测试,并且缺少对应的客户端实现。在使用中有任何问题欢迎反馈。

包结构

  • 本结构参照zinx的网络包结构,通过消息ID + 数据长度 + 数据构建一个网络数据包
  • MID uint32(4 bytes) + DataLen uint32(4 bytes) + Data(n bytes)

使用方法

  • 在网关节点构建一个simple的网络数据包解析器
  • 通过simple.AddNodeRoute(mid,&NodeRoute{...})构造数据包路由策略
  • 示例代码

示例代码

// 构建简单的网络数据包解析器
func buildSimpleParser(app *mhaya.AppBuilder) cfacade.INetParser {
    agentActor := simple.NewActor("user")
    agentActor.AddConnector(cconnector.NewTCP(":10011"))
    agentActor.AddConnector(cconnector.NewWS(app.Address()))
	
        agentActor.SetOnNewAgent(func(newAgent *simple.Agent) {
        childActor := &ActorAgent{}
        //newAgent.AddOnClose(childActor.onSessionClose)
        agentActor.Child().Create(newAgent.SID(), childActor)
    })

    // 设置大头&小头
    agentActor.SetEndian(binary.LittleEndian)
    // 设置心跳时间
    agentActor.SetHeartbeatTime(60 * time.Second)
    // 设置积压消息数量
    agentActor.SetWriteBacklog(64)

    // 设置数据路由函数
    //agentActor.SetOnDataRoute(onSimpleDataRoute)

    // 设置消息节点路由(建议配合data-config配置表使用)
    // mid = 1 的消息路由到  gate节点.user的Actor.login函数上
    agentActor.AddNodeRoute(1, &simple.NodeRoute{
        NodeType: "gate",
        ActorID:  "user",
        FuncName: "login",
    })
	
    return agentActor
}