协议收发

协议收发

协议就是进程之间通信的内容。


进程通信方式

进程之间使用INetworkModule提供的工具进行网络通信。它通过一个回调器(IEngineNetCallback)获取通信的内容,我们需要自己实现这个回调器。

我们将协议作为通信的内容,从一个进程发送到另一个进程,另一个进程收到协议后,需要根据协议号进行识别,然后做出相应的处理。

协议的定义 = 协议头 + 协议内容

一个协议文件的格式是:

#ifndef __MSG_TEST_H__
#define __MSG_TEST_H__

#include "msgheader.h"
#include "msgcode.h"

#pragma pack(push) 
#pragma pack(4)

namespace Protocol
{
    class CSTest
    {
    public:
        CSTest() : header(MT_TEST_CS) {}
        MessageHeader header;
        char buffer[1024];
    };
}

#pragma pack(pop)

#endif // __MSG_TEST_H__


以下代码片段表示其中的结构体定义将以4字节对齐。

#pragma pack(push) 
#pragma pack(4)

//...

#pragma pack(pop)

确定字节对齐长度并让数据成员紧凑排列是很重要的,这样才能确保另一端的进程正确解析该协议。

如果我们的结构体的成员没有紧凑排列,或者没有确定的字节对齐长度,那么会出现什么问题?、

协议都有一个协议头(MessageHeader),它通过绑定一个协议号来标识该协议,一个协议必须拥有唯一的协议号。

协议处理的流程

协议处理的代码占据服务端编程内容的大部分。它的流程大致是:客户端发送协议 -> 服务端接收协议并安排处理函数处理 -> 服务端返回处理结果协议。

如果你在编写逻辑代码,这个流程很可能是:

ServerNetworkCallback::OnRecv
    World::OnRecv
        SceneManager::OnRecv
            MessageHandler::HandleMessage
                MessageHandler::yourfunctions   // 你自己定义的处理函数

 

转载于:https://www.cnblogs.com/jonwei/articles/9589919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值