## 共享内存
如果两个程序在同一台主机上,要进行通信,应该怎么办?
我们知道,操作系统把进程严格的隔离开来,通过虚拟内存的机制让每个进程都有一个虚拟的、独立的地址空间,所以大加都以为内存中只有一个程序在运行。
那么两个进程如何通信呢?可以使用共享内存。
程序A把消息放到共享内存里,然后让程序B去使用CPU,并且把回复的信息放到同一个共享内存中。
那么如何进行消息的同步呢?也就是说,必须写了以后才能读。防止写的时候,同时被读走了。
一般是使用操作系统来做同步操作,可以防止读写的冲突。
## socket
那么如果两个程序不在同一台主机呢?当然使用网络进行通信,最基础的是使用原始的socket进行通信
使用原生的socket需要考虑很多东西,最关键的是**同步**。
共享内存的方式,同步是由操作系统来做的。而如果使用了网络,需要协商一个协议,约定好消息的次序和格式,才能解决同步的问题。
## Web
如果两台服务器安装了防火墙,除了几个特定的端口(比如80,443等),都不允许访问了。
那么可以ping通,但是无法进行通信。
可以把消息包装成Web服务,通过HTTP(80)或者HTTPS(443)来访问,这样防火墙是允许的。
一个Web服务首先需要有一个endpoint,其实就是一个URL,描述了Web服务的地址。
其次需要确定Web服务描述方式和数据传输方式,如果使用WSDL和SOAP就太繁琐了,都是XML,有很多冗余的标签,可以使用HTTP+JSON