关于自定义协议 ,大家来讨论一下,怎么做最合适

LinuxCard 2015-04-27 02:39:42
客户端和服务器端通过自己定义的应用层网络协议来互相通讯,目前来说有几种方式:

1.传输数据,以某种特定的间隔符号来区分数据,比如 商品编号|商品名称|商品价格|商品数量|

这样传输的好处是需要传输的数据比较小,速度快,
缺点是:如果以后协议需要修改,和以前客户端的兼容性会是个头痛的问题,调试的时候,也会比较头痛,如果数据多了,得一个一个的数,看问题出在那里

2.传输数据+数据描述信息 ,比如 以json方式,或者xml格式来传输数据,比如 商品编号=0211|商品名称=胡箩卜|......
优点:调试方便,语义明确,如果以后需要修改协议,和老的客户端兼容性比较好
缺点:传输的数据增多,每次传输,都要额外的传输一些重复的数据,相对的就会比较慢点


现在我有一个想法,不知道是否可行,说出来大家探讨一下

程序启动的时候,服务器端一次将数据的模板传输过来,
如果行情信息是模版A,(商品编号|商品数量|商品价格|)交易信息是模版B,出错信息是模版C,程序启动的时候,一次传输A B C,然后等到传输实际数据的时候,只传输模版名和实际的数据,比如(A,0211|20|23.34)

这样做的好处是
数据量基本没有增加,有了协议模版,当需要修改协议的时候,只要修改协议模版,客户端就能正确的读取数据了,兼容性没有问题

大家觉得这个想法是否可行?模版的解析有没有好的办法?
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2015-04-27
  • 打赏
  • 举报
回复
数据协议的定义是相当重要的,这关系到以后系统升级,版本兼容性,扩展性的问题,比如你开发一个服务器程序,很多客户端程序与服务器交换数据,这些客户端程序早发布到客户那,如果你服务程序修改,通讯要增加一点内容,你不可能把所有客户端全更新一次,所以,你还得兼容老版本。 目前我的做法是自己定义一个协议头,这个协议头是固定大小,会包含很多信息,比如通讯的版本号,加密解密码方式,包头大小,实际数据大小等等,接收方先收协议头,然后根据协议头里的信息再接收实际数据。
xian_wwq 2015-04-27
  • 打赏
  • 举报
回复
如果用第二种方法,感觉冗余数据过多, 可以考虑在传输数据前,将数据压缩
oyljerry 2015-04-27
  • 打赏
  • 举报
回复
现在网络带宽不像以前了,所以json格式比较简单,而且直观,也就是为什么http的web API这么流行。 当然如果你更侧重底层通信,那么就还是用传统的socket加自定义结构协议。这样效率最高。
worldy 2015-04-27
  • 打赏
  • 举报
回复
不错,去把他做出来吧

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧