消息队列_11(传输协议)

传输协议:应用程序之间对话的语言

应用程序之间要想互相通信,一起配合来实现业务功能,还需要有一套传输协议来支持。

传输协议就是应用程序之间对话的语言。

设计传输协议没有太多规范,通信双发正确处理好这个协议且没有歧义就好

设计高性能传输协议的方法和技巧:

1.如何“断句”

  1. 在协议中加上“标点符号”,就相当于定义一个分隔符

很多传输协议采用这种方法,如HTTP1协议,它的分隔符是换行(\r\n)。

存在问题:无论定义什么字符作为分隔符,理论上,它都可能会在传输的数据中出现。像换行符也会出现在我们的数据中,无法区分这个是分割符还是数据。

解决:为了区分“数据内的分隔符”和真正的分隔符,必须得在发送数据阶段,加上分隔符之前,把数据内的分隔符做转义,收到数据之后再转义回来。
缺点:麻烦,且损失一些性能

  1. 在每句话前面加一个表示这句话长度的数字,收到数据的时候,按长度读取
    eg.
    03 下雨天 03 留客天 02 天留 03 我不留
    优点:简单,性能好,目前最普遍的一种分隔数据的方法

2. 用双工收发协议提升吞吐量

2.1 单工协议

HTTP1协议,就是一种单工协议,客户端与服务端建立一个连接后,客户端发送一个请求,知道服务端返回响应或者请求超时,这段时间内,这个连接通道上是不能再发送其他请求的。

效率低。一般通过在服务器和客户端同时创建多个连接解决这个问题

2.2 双工协议

TCP连接是一个全双工的通道,可以同时进行数据的双向收发,互相不会收到任何影响。
要提高吞吐量,应用层的协议也必须支持双工通信。
问题:数据传输之间的顺序对应不上。
解决:实际设计协议的时候,一般不关系顺序,只要确保请求和响应能够正确对应就行。但可以在发送请求的时候,给每个请求加一个序号,这个序号在本次会话内保证唯一,然后响应中带上请求的序号,这样就可以把请求和响应对应上了

3. 问题

现一个简单的高性能通信程序。功能就是上面两个大爷那三组对话,服务端是张大爷,客户端是李大爷,两个通信一百万次,记录总耗时。

参考:代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值