0
点赞
收藏
分享

微信扫一扫

golang 工程组件:grpc-gateway option自定义http规则

目录

一、应用层协议

应用层是和代码直接相关的一层,决定了数据要传输什么,怎么去使用这些数据等问题。
应用层这里,虽然存在一些现有的协议(比如HTTP),但是也有很多的情况,需要我们去自定义一些协议,这里的自定协议就是约定应层数据报的数据格式。

  • 如何约定格式?
  1. 确定要传输哪些信息。(根据需求)

比如一个外卖程序,我们需要传输以下的信息。

  • 请求 : 用户id ;用户的位置等
  • 响应 : 若干个商家信息 ; 每个商家信息:商家的名字 ; 图片 ; 评分 ; 类型等

在这里插入图片描述
2. 确定数据按照什么样的格式来组织的
一个简单的方案就是按照分隔符进行组织数据,如下图:

在实际的开发中,还有一些现成的格式,是可以直接使用的

  • xml格式

这种格式主要是通过标签的形式来组织数据,具体如下图:
在这里插入图片描述
其中 html 可以看作是 xml 的特殊情况

  • json 格式

json 是使用 {} 来作为标识的
在这里插入图片描述

二、传输层协议(UDP协议)

学习协议的一个重要环节:认识 协议的报文格式

UDP的报文格式:
在这里插入图片描述
在这里插入图片描述

  • UDP的特点
  1. 无连接
    知道对端的 ip 和 端口号就可以进行通信,不需要建立连接
  2. 不可靠
    没有任何的安全机制,即是 发送端发送数据报之后,如果因为某些原因,接收端没有收到来自发送端的数据,UDP协议层也不会给发送端返回任何的错误提示信息
  3. 面向数据报
    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并
  4. 全双工
    UDP只有接收缓冲区,没有发送缓存区

UDP的 socket 既能读,也能写,这个概念叫做全双工

  • 源端口和目的端口
  • 报文长度
  • 校验和
  • 扩展问题

经典面试题:

  1. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
  2. UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?
举报

相关推荐

0 条评论