## 共享內存
如果兩個程序在同一臺主機上,要進行通信,應該怎么辦?
我們知道,操作系統把進程嚴格的隔離開來,通過虛擬內存的機制讓每個進程都有一個虛擬的、獨立的地址空間,所以大加都以為內存中只有一個程序在運行。
那么兩個進程如何通信呢?可以使用共享內存。
程序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