免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8806 | 回复: 16
打印 上一主题 下一主题

[其他] 如何设计一个消息帧的帧头 [复制链接]

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-07 09:24 |只看该作者 |倒序浏览
本帖最后由 hiterator 于 2012-10-07 09:24 编辑

模块之间传递消息,可能跨网络,如何设计一个消息帧的头部?
各位大侠有没有相关的经验,可以参考下?

论坛徽章:
0
2 [报告]
发表于 2012-10-07 11:04 |只看该作者
消息长度,
消息mac,
节点id

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
3 [报告]
发表于 2012-10-07 11:20 |只看该作者
当前计划使用的消息帧:

消息开始字段(固定值)
消息标识(mac)               == 标识消息序列号
消息长度
节点id (这个应该是消息内容标识吧? 如果同时有请求消息和响应消息,使用相同格的帧头是否合适?)
标识本消息是否分帧标志 (如果消息体太长的话,可能有多帧,标识是否最后一帧,这个是否需要)

另外, 消息体一般如何定义? 如果消息体是struct类型的话,好像直接将struct发送出去比较不保险啊

回复 2# wenlq


   

论坛徽章:
0
4 [报告]
发表于 2012-10-07 11:30 |只看该作者
节点id 看你是否需要,我一个项目用于加解密取密钥的。
消息长度弄个网络字节序的long,长度可至4G。
消息体用struct非字符串的存在大小端问题,用xml吧。

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
5 [报告]
发表于 2012-10-07 12:34 |只看该作者
wenlq 发表于 2012-10-07 11:30
节点id 看你是否需要,我一个项目用于加解密取密钥的。
消息长度弄个网络字节序的long,长度可至4G。
消息 ...


这个主意不错  加解密这次就不去考虑了;

XML作为网络传输是个好主意,但会添加不少额外字符吧? 纠结
有没有更简单点的,直接发送的;
如果没有更好的,就直接每个struct加htonl转换了,就是难看点~

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
6 [报告]
发表于 2012-10-07 12:45 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-07 12:46 编辑
hiterator 发表于 2012-10-07 12:34
这个主意不错  加解密这次就不去考虑了;

XML作为网络传输是个好主意,但会添加不少额外字符吧 ...


哎,XML 不过是个标记文本
网络传输传的是字节, 不是XML,XML 也会转换成字节的啊

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
7 [报告]
发表于 2012-10-07 12:56 |只看该作者
回复 6# __BlueGuy__


这个XML貌似扩展性好些,传输上效率上应该会差不少的


有没有方便扩展,传输效率高些的方法

当前准备这样扩展,每次有新消息,就准备在消息头里的 内容标识字段 新增加一个id;
消息体struct就每个都单独转换成网络序...


消息开始字段             == (固定值)
消息标识(mac)               == 标识消息序列号
消息长度
消息内容标识(节点id ??)      ==
标识本消息是否分帧标志

消息体struct1
消息体struct2
...




论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
8 [报告]
发表于 2012-10-07 13:01 |只看该作者
你还没传输就考虑效率啊,

论坛徽章:
0
9 [报告]
发表于 2012-10-07 13:17 |只看该作者
如果不是UDP啥的,没必要“标识本消息是否分帧标志”,如果是是私有协议通讯,个人觉着基础帧这样既可:“长度 + 校验码(可选) + 消息体”

其中消息体部分
文本方式:JSON/XML等(推荐json)
第三方库:protobuf/AMF3等(推荐protobuf)
自有协议:建议实现一个dictionary的序列化和反序列,用于传输。强烈不建议传输struct,后续增删修改代价很高。

消息体部分再包含其他信息(不全是数据区),如帧号、数据神马的

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
10 [报告]
发表于 2012-10-07 14:05 |只看该作者
回复 9# liuspring6


    明白人出现了 , 其实最后就是要实现一个自有协议类似的东东,方便添加扩展;

“实现一个dictionary的序列化和反序列” 有没有已经实现的例子   感谢//


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP