通讯长连接-业务通讯

乐云一
  • 业务
  • 业务
About 1812 wordsAbout 6 min

通讯长连接

在我们的生活中无时无刻都存在联系之间的连接与断开,手机WIFI的断开、连接、账号的上线与下线、聊天窗口的打开与关闭等等.....

在计算机程序设计中,关于连接的名词比比皆是;首先最先接触的是UDP、TCP,三次握手建立连接、四次握手建立连接,这种简单的通讯连接技术。

随着学的东西越来越多,接触到,我连接你、你连接我的业务与技术也愈加频繁:数据库连接、配置中心连接、微服务通讯、聊天室、网盘....,在享受着大佬们创建的连接轮子的同时,也不得不感叹其中的奥妙,因此本篇将连接 这一技术针对我的理解进行记录。

种类

连接摆在明面上都应该统称为 通讯连接 ,不管是WIFI、物联网、程序之间....都是因为需要通讯而建立连接的因果。

所以从通讯的角度上来看,大致上分为三种:

  • 直接通讯
  • 间接通讯
  • 业务通讯

直接通讯很明确,拿最简单的TCP举例子,TCP作为一个必须进行三次确认的长连接协议,保证通讯稳定的同时也是将A、B两分的通讯地址强依赖关系进行绑定。因此A向B方发送消息不存在中间商过路费的概念,因此这种通讯连接的方式就是直接通讯。

间接通讯,即信息交换的地点选取在了中间商地。同样拿最简单的UDP举例子,有了解过即时通讯软件的童孩有经验:在针对聊天信息的读与发的主流程,一般都是通过UDP协议,以发包的方式将消息寄存在中间服务器上,随后通知对方取包、解包。连接仅仅建立在A 中间商 、B 中间商 的两两方间,因此我称这种为间接通讯。

业务通讯 ,一种假连接方式,多存在于程序于程序之间的通讯方式。比如微服务体系中服务于服务之间的通讯方式,一般都是通过将自己的标识信息注册到登记表上,然后对方通过服务于发现的手段进行HTTP式的调用;和间接通讯相似,但是A、B两服务之间不存在任何的耦合性,因此这种通讯常常发生在业务实现中。

简单的讲解,直接通讯和间接通讯就不提了,一般都是由某一种主流协议,比如TCP\UDP\USB接口\蓝牙\NFC...等等围绕着展开,因此想记录的是目前接触的各式各类 "业务通讯" 的方式。

业务通讯长连接

这种连接模式与其说是连接,我更习惯叫记住对方、让对方记住我模式。

首先拿我们经常使用的微服务服务注册与发现中心Dubbo举例;

Dubbo是一个将应用中标识的类与方法注册到其服务中心的服务调用框架,拥有业务方注册服务于发现服务的功能。

在一次服务注册发现流程中,Dubbo在服务调用的功能中核心实现有两种:数据传输心跳包

针对这两步,完成服务中心与业务方的通讯,Dubbo结合自身特性与NIO非阻塞异步的优化性,实现了自己的dubbo 单一长连接和NIO异步通讯 协议,除此之外还可适配市面上众多的主流协议,比如 webservicehttpRPC ....

为此,如果有使用过Dubbo-spi 的同志可以发现,Dubbo在适配各协议通讯的同时,不知不觉间创建出了 在Dubbo内部方法之间可灵活通讯的 SPI 机制...

不过上述有一些题外话了,我主要想介绍的是Dubbo的服务注册和发现的核心原理:

服务提供者将自己提供的服务信息注册到注册中心,注册中心将这些信息记录下来。服务消费者启动时,向注册中心发起订阅,将自己感兴趣的服务提供者的信息拉取到本地并缓存起来,用于后续远程调用

在JAVA中,业务方将标注的方法以及类的全限名和Dubbo-Service的分组注册上去,这就是上述所说的业务通讯的标识;

而消费方,只需要用该标识去获取"通讯连接",通过特定的服务协议,传输数据,因此这种称为业务通讯。

可以发现,所谓的业务通讯不过是建立在直接或间接通讯上的一种功能实现方式 ,也正因如此,我认为在通讯长连接的功能中,业务通讯的设计更贴合我们的日常,比如聊天室功能:除了最简单的UDP实现方案外,也存在一种网页上通过Session确定唯一标识,然后建立出点对点的WebSocket连接方式;蓝牙搜索:设备暴露出自己的唯一标识,建立蓝牙连接...

物联网中,业务通讯长连接的设计非常普遍;

物联网应用或产品往往是由一个或几个的设备中心所控制,针对设备与设备中心的连接,早在1999年 Andy Stanford Clark和Arlen Nipper 就创造了 MQTT 协议小型长连接的协议奠定连接基础。

对于物联网的设备连接,首先得明白,虽然在使用体验上来说,通过APP、应用去操作设备一般操作延时微乎其微。但是设备与设备控制中心是不可能存在直接长连接的关系,因为设备中心是中心化的控制室,管理的设备成千上万。

如果每个设备都与其建立长连接,这是很不可思议的事。

所以物联网中设备与控制中心的通讯长连接的设计,就是一种很经典的 业务通讯设计,举一个亲身经历的设计案例:

基础MQTT协议的特性,将设备唯一标识与MQTT连接的clientId 进行强绑定,随后设备中心接收到该ClientId的连接信息后,只需要记录其标识。就可以通过向EMQ发送指令,由EMQ进行转发。

当然了,实际实现不会这么简单,因为还需要考虑到设备上下线,信息变动,并发...等等问题。

总结

熟话说,熟能生巧;在着手从2019年最简单的仿QQ-即使通讯软件,到最近的物联网设备通讯,脑海中逐渐浮现出了接触这类 间接的业务通讯功能的蓝图,为此以作记录

Last update:
Contributors: LeYunone
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.14.7