
这三种传输信息的方式看起来都通过一个“中间人”传输信息的方式大差不差。但其实本质上是完全不同的。SSE本质上还是HTTP请求只不过是一种长连接的HTTP而且是单向的只能服务器到客户端。假设现在有两个客户端一个服务器。客户端a先和服务器建立了连接这个连接不会马上就关闭假设a要给b发消息a通过post请求把消息发到服务器上了服务器先存库。但是这个时候b还没有和服务器建立连接所以消息暂时是发不出去的不过a感觉不到因为a的消息本来也不用发给自己。等b和服务器建立连接之后此时a再给b发消息那么消息就会顺利的发送到b这边但是那条没发出来的消息得靠b自己拉一次历史消息才能看到。这样就能产生一种实时推送的感觉。a发消息了消息就顺着这根长连接的水管从服务器这边自动流向b同样的b发消息了消息也会顺着这根长连接的水管发给a。有点像这样子的感觉服务器的“海拔”要高于a和b客户端a 客户端b│ │管子A│ │管子B│ │└──────▶ [服务器] ◀────┘RocketMQ:这是一个中间件了由NameServer和Broker组成其中NameServer是带代码查找的东西在哪里的Broker是存放的地方。整体流程是producer这边发送了一个消息给broker服务器broker会把消息接收并存磁盘与此同时comsumer这边会不断的询问broker服务器有没有我的新消息。等到broker说有以后comsumer就会自动拉取消息。MQTT这个和HTTP一个级别是一种通信协议了一般作用于无人机和物联网这边。假设现在有一个无人机的记载端一个后端服务器。机载端开机之后先连上broker告诉broker我要订阅这个topic的消息那么之后只要有发送到这个topic的消息broker会自动发给机载端。后端服务器想发送消息给机载端的话它不会直接和机载端通信它是先把消息发给broker服务器broker根据这条消息要发送到的topic查找订阅了这个topic的“人”然后自动把这个消息发给这个“人”。在这个过程中后端服务器是不知道有多少机载端订阅了这个topic的。信息被发给机载端这边之后如果机载端想回复那么整体流程是一样的但是发消息和接消息的topic不是同一个同样的后端服务器发消息和接消息的topic也不是同一个。所以机载端这边发消息也会先把消息发给broker服务器 broker根据要发到的topic自动发给订阅了这个topic的后端服务器。broker全程只有一个端口怎么区分发送消息的地址就靠topic区分的