系统间通信(一)

系统间通信主要考虑以下三个方面:消息格式,网络协议,通信模型(框架)。

类比于两个人说话交流,那么消息格式可以理解为语种(汉语,英语...,当然消息本身就是语种加说话的内容啦);网络协议可以理解两个人的声音的传输介质,比如空气(如果没有介质,那么一个人说说话另一个人肯定是听不到的);通信模型可以理解为两个人对话的方式,比如A和B两个人交流,A先问了B一个问题,A可以在收到B对那一个问题的的反馈后再继续问,也可以不等B的反馈,继续问问题(因为有的问题B需要思考很久才能回答,有的问题却不需要思考很久)。

1.消息格式:

    XML:和语言无关,常用于对系统环境进行描述,如常见的maven仓库配置,或者spring配置等。

    JSON:轻量级消息格式,和语言无关。携带同样的信息,占用容量比XML小。

    protocol buffer:Google定义的消息格式,只提供了java,c++和python语言的实现。

    TLV:比JSON更轻量级的数据格式,连JSON中的"{}"都没有了。它是通过字节的位运算来实现序列化和反序列化。

2.网络协议:

    

数据在网络七层模型中传递的时候,在网络层是"数据包",在数据链路层被封装成"帧"(数字信号),在物理层则是"比特"(电信号)。

3.通信模型:阻塞式通信模型,非阻塞式通信模型,同步通信模型,异步通信模型。

    这四个概念可能理解起来比较混肴,这里说一下我的个人理解。

    两个系统在通信的时候,IO操作会发生在两个地方。第一个地方是系统底层接收数据报文的时候(应用程序请求操作系统获取外部网络连接,而操作系统在收到请求后等待外部网络连接);另一个地方是程序在读写数据的时候(应用程序请求操作系统进行网络IO操作,操作系统接收到请求后等待外部网络发送过来数据去接收)。配图如下:


    阻塞式和非阻塞式是针对程序级别的,而同步和异步是针对操作系统级别的。即应用程序在等待操作系统的请求响应时,应用程序什么都做不了,就是阻塞(那么非阻塞就是应用程序可以在等待的这段时间内进行其他操作,但是会有一个任务一直轮询,询问操作系统是否有准备就绪的外部网络连接,直到有外部网络连接就绪);而操作系统在等待外部网络连接请求或者数据传输的时候,是用"同步"方式接收的,即在这个时间段,操作系统什么都不干,不回复应用程序,直到有外部网络连接请求或者外部网络数据传输才通知应用程序。而"异步"就是操作系统在等待的时候,可以做其他操作,当有外部网络连接请求或者外部网络数据传输到达的时候会通过事件机制通知应用程序。


猜你喜欢

转载自blog.csdn.net/Dream_Ryoma/article/details/80422646