免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hiterator
打印 上一主题 下一主题

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

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
11 [报告]
发表于 2012-10-07 14:12 |只看该作者
本帖最后由 hiterator 于 2012-10-07 14:47 编辑
liuspring6 发表于 2012-10-07 13:17
消息体部分再包含其他信息(不全是数据区),如帧号、数据神马的


把帧号分开和头部分开, 等于是又构造了一个消息头吧,为啥这样处理,好像不太好吧


另,当前使用的是TCP协议,就是要在TCP基础上造一个方便扩展和传输的自有格式;

论坛徽章:
0
12 [报告]
发表于 2012-10-07 15:58 |只看该作者
关于dictionary的实现,这个东西不难,但是比较庞杂,一般来讲关联依赖比较多,不太好给,不过就是一个key=value结构,实现以下的序列化和反序列化,基本dictionary也块完工了
int、long long、string、date、bytearray,然后利用前面基础元素实现array、dictionary
这些的实现简单点说,无非就是个"类型 + 长度(可选,string、bytearray等需要) + 数据"

论坛徽章:
0
13 [报告]
发表于 2012-10-07 16:07 |只看该作者
关于消息体部分还带有消非数据信息,主要是在实践中证明(至少我做的项目里出现了),随着需求的变更,消息包需要附带的信息还是有变化的,放在这部分便于后续调整。
而且这部分用dictionary实现,可以按照实际需要有时编码相关内容,有时不编码相关内容(接收方取默认值)。
例如:有小部分部分消息需要附带发送方的IP,而大部分消息不需要。帧号同理,我C2S就要帧号(确保数据包有序合法),但是S2S就无需帧号。

论坛徽章:
0
14 [报告]
发表于 2012-10-07 16:16 |只看该作者
我觉得可以参考一下3GPP pdu串的定义一般应该够用了。呵呵。拙见。

论坛徽章:
0
15 [报告]
发表于 2012-10-08 10:06 |只看该作者
本帖最后由 wwwsq 于 2012-10-08 10:11 编辑

有几种协议可以供楼主参考:
1,protobuf这是个不错的解决方案,很值得了解一下。通过IDL来定义数据协议,然后自动生成代码,所有模块立刻就有现成好用的代码可以打包、解包了。而且对ide的自动代码提示功能很友好,不容易出现打字错误。一般的公司直接用protobuf就很好了,大公司可以考虑结合自己的需求重建一个(可能会有跨编程语言、大数据、数据类型推导等特殊需求)。缺点是改协议不太方便,随便改点什么都有N个相关模块要发新版本。
2,金融行业的FIX协议。是很简单的一种dictionary协议,非常简洁,因此非常稳固。广泛应用于金融行业。是一个文本的协议。
3,json协议。打包解包的效率一般,对中文的支持不好,对二进制数据的支持不好。也是一个文本的协议。
4,xml协议,主要缺点是打包解包的效率比较低。xml和json都属于弱类型的协议,在处理float、double、bool、image之类的数据的时候不太清爽。
5,传统的定长结构,最好不要考虑。考虑用定长结构的人都应该用protobuf。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
16 [报告]
发表于 2012-10-08 11:52 |只看该作者
本帖最后由 linux_c_py_php 于 2012-10-08 11:53 编辑

楼主如果仅仅是想做成: 头+体 的报文格式, 那我觉得你想怎么做都可以, 最快的是二进制头, 不需要考虑协议扩展性, 5分钟改一版, 真正的可扩展性是看程序架构, 而不是协议自身, 谁都避免不了改代码, 无非好的设计是加代码, 普通的设计是改代码.

楼主的意思是报文交互, 也就是内容总是一包一包的区分, 这种协议我觉得你自己觉得合适就行, 在这方面尤其推荐HTTP协议, 非常有利于程序扩展性, 因为HTTP本身是分布式的, 基于URL进行资源定位, 到了程序里就是基于URL的callback, 完全可以解耦, 推荐使用.

如果不希望有头, 那就需要使用带有"节"含义的协议, 比如XML, 它依靠本身的格式进行包划分, 不需要通知包长, 这就是与上面协议的最大区别.
XML开发成本稍大, 需要使用基于callback机制的expat库, 解析与应答XML Stanza进行交互, 适合长连接, 你如果喜欢XML风格的程序, 非常推荐使用.

论坛徽章:
0
17 [报告]
发表于 2012-10-08 15:30 |只看该作者
高人啊            
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP