自定义协议

本文探讨了自定义协议在应用程序中的设计灵活性,以及XML、JSON和Protobuf等通用协议格式的优缺点。强调了在开发效率和运行效率之间的选择,指出在大多数情况下,开发效率优先,可通过优化编程和增加人力资源来提升性能。
摘要由CSDN通过智能技术生成

应用层

有许多现成的协议(HTTP协议做网站必备),也有许多需要程序员自定义的协议.

1.自定义协议

自定义协议:

1.明确传递的信息是什么

2.约定好信息按照什么样的格式来组织成二进制字符串

举个例子:

当我们点外卖时,打开软件,会显示商家列表,列表中有很多项,每一项都包含了一些信息.商家的名称,图片,好评率......这些信息是通过网络,从服务器获取的.

  • 客户端,需要给服务器发起一个请求,服务器收到请求之后,就给客户端返回一个相应.
  • 外卖软件和服务器之间的沟通,有很多方式,显示商家列表,只是其中一个.因此,在开发设计这个程序的时候,就需要做好良好的规划.
  • 这里的设计是非常灵活的,最主要的是有一个固定的标准...

1.1 示例一 

 实际上,上诉这样的格式约定,可以任意进行约定.只要保证,客户端和服务器遵守同一个约定即可.

1.2 示例二

1.3 示例三

上诉可以看到:

请求和响应,具体的数据组织形式,是非常灵活的,怎么组织都行,只有保证客户端和服务器这边使用的是相同的规则即可.

不同的应用程序,使用的自定义协议是不同的.

2.几个通用的协议格式

2.1 xml

是以成对的标签,来表示"键值对"信息,同时标签支持嵌套,就可以构成一些更复杂的树形结构数据.

优点:xml'非常清晰的把结构化数据表示出来了.

缺点:表示数据需要引入大量的标签,看起来繁琐,同时也会占用不少的网络带宽.

2.2 json

  • 本质上也是键值对.
  • 使用{ }来表示键值对,使用[ ]来表示数组.
  • 数组里的每个元素,可以是数字,字符串,也可以是其它的{ }或[ ].
  • json对于换行并不敏感,如果这些内容全都放在同一行,也是完全合法的.
  • 一般网络传输的时候,会对json进行压缩(去掉不必要的换行和空格),同时把所有的数据都放到一行去,整体占用的带宽就降低了.(影响可读性).

优点:相比于xml,表示的数据简洁很多,可读性非常好,方便程序员观察中间结果,方便调试问题.

缺点: 需要花费一定的带宽来传输key的名字.

2.3 protobuffer

  • 一种二进制的数据序列化方式.
  • 使用二进制的方式,约定某几个字节,表示哪个属性.
  • 最大程度的节省空间(不必传输key,根据位置和长度,区分每个属性).
  • 适用于对于性能要求更高的场景.牺牲了开发效率,换来了运行效率.

优点:节省带宽,最大化效率.

缺点:二进制数据,无法直接肉眼观察,不方便调试.使用起来比较复杂.

问:

对于一个程序来说,是开发效率(写代码快不快)重要,还是运行效率重要(程序跑的快不快)?

答:开发效率更重要!

要想提升运行效率,可以通过升级硬件.

要想提高开发效率,就得招聘更多的程序员.人力成本!!!

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT是一个跨平台的应用程序开发框架,支持网络编程,并提供了一套自定义协议的功能。 在QT中,我们可以使用QT的网络模块来实现网络通信。网络模块提供了基于TCP和UDP协议的Socket类,可以用于进行网络连接、数据发送和接收等操作。 对于自定义协议,QT提供了QTcpSocket和QUdpSocket两个类,我们可以通过继承这两个类来实现自己的网络协议。 对于TCP协议,我们可以通过继承QTcpSocket类,并重写其中的虚函数来实现自定义协议。通过重写其中的数据接收函数,我们可以解析接收到的数据,并根据自定义协议进行相应的处理。同时,我们也可以重写数据发送函数,将数据按照自定义协议组织成数据包并发送出去。 对于UDP协议,我们可以通过继承QUdpSocket类,并重写其中的虚函数来实现自定义协议。通过重写其中的数据接收函数,我们可以解析接收到的数据,并根据自定义协议进行相应的处理。同时,我们也可以重写数据发送函数,将数据按照自定义协议组织成数据包并发送出去。 除了继承socket类外,QT还提供了信号与槽机制,我们可以通过信号与槽来处理自定义协议的通信。即在数据接收端,我们可以通过接收到特定的信号来触发槽函数进行数据处理;在数据发送端,我们可以通过槽函数来触发信号发送数据。 总的来说,QT网络模块提供了丰富的功能和工具来实现自定义的网络协议。我们可以根据自己的需求,使用QT的网络模块和自定义协议的功能来进行网络通信和数据处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值