通常我們交互除了P2P等協(xié)議,大多數(shù)都是基于C/S架構(gòu)的通信場(chǎng)景,比如FTP, HTTP, DNS等。但是再設(shè)一一些安全協(xié)議方案的時(shí)候通常包括多方服務(wù)器和用戶。此時(shí)應(yīng)該如何通信那?比如傳遞命令和傳輸密鑰。
(1)Socket
一般情況下比如我們?cè)O(shè)計(jì)一個(gè)后端服務(wù),包括多個(gè)服務(wù)器:數(shù)據(jù)庫(kù)服務(wù)器,web服務(wù)器,文件服務(wù)器、緩存服務(wù)器等的通信,一般是通過(guò)socket來(lái)設(shè)計(jì)專門的通信協(xié)議,因?yàn)楸容^高效。比如MySQL,MS SQL等也都是有知名的專用端口號(hào)。這個(gè)場(chǎng)景大多是在一個(gè)內(nèi)網(wǎng)中,所以通信效率一般沒(méi)問(wèn)題。
(1)大學(xué)畢業(yè)設(shè)計(jì),我是采用socket編程來(lái)實(shí)現(xiàn)客戶端與服務(wù)器之間的通信,所以當(dāng)需要服務(wù)器之間通信的時(shí)候,我也采用了socke的方法,只不過(guò)請(qǐng)求的服務(wù)器變成了“客戶端”。所以相當(dāng)于各方既是C也是S。只不過(guò)主動(dòng)發(fā)起的一方是C,被動(dòng)監(jiān)聽(tīng)的一方是S。
(2)Socket通訊簡(jiǎn)單的方法是發(fā)送方用1個(gè)固定連接發(fā)送(比如SMTP/POP3等),或發(fā)送方每個(gè)請(qǐng)求數(shù)據(jù)包新建一個(gè)連接發(fā)送(比如PHP/Ruby連MySQL)。
(2)Http
服務(wù)器和服務(wù)器直接同樣可以用HTTP,特別現(xiàn)在最常用的RESTful風(fēng)格的通信方式(webserivces )。這時(shí)通信的時(shí)候就不需要瀏覽器了,比如服務(wù)器A可以使用curl系列命令向服務(wù)器B發(fā)出HTTP請(qǐng)求,獲取數(shù)據(jù),格式可以用通用的JSON或XML。也可以用java自帶的HttpURLConnection,或者Apache的HttpClient等Http客戶端來(lái)實(shí)現(xiàn)。當(dāng)然底層還是通過(guò)Socket實(shí)現(xiàn)。