關於客戶端與服務端通訊的一點感悟

2021-08-10 03:39:01 字數 1125 閱讀 9260

那麼這篇部落格也是我的一點感悟,圍繞以下幾個問題開展:

1.客戶端如何與服務端一直保持聯絡?

2.客戶端如何與資料庫進行通訊?

這裡,對於大部分客戶端來說,其實打交道的服務端有兩個子模組:

2.長時服務端:即使客戶端下線,也要一直存在的管理邏輯,用於處理大量的資料,封裝控制 api 等等。

我們隨便開啟乙個桌面軟體,比如說 qq。當我們登入之後,服務端會控制我們客戶端的一些行為,比如顯示新聞、顯示未讀資訊等等。這些資料是怎麼來的呢?客戶端是如何得知的呢?

顯然是通過即時服務端獲取的。

也就是說,當我們客戶端執行之後,第一件事情就是與即時服務端進行通訊,建立可靠的 tcp 連線,使得我們的客戶端與服務端可以即時通訊。當我們客戶端想要從服務端獲取資訊了,我們就傳送資訊給服務端,然後監聽服務端的返回資料;當服務端想要控制客戶端的行為時,就傳送資訊給客戶端,客戶端就做出相應的響應操作。

也就是說,客戶端與即時服務端是實時即時通訊的。

而客戶端總會有需要請求資料庫資料的時候。這個時候,與即時服務端通訊也無法滿足要求了,我們該怎麼辦呢?

很簡單,呼叫長時服務端的 api。

當我們使用者登入之後,即時服務端會傳送乙個獨屬於這個使用者的用於認證的 ticket,這個 ticket 可以看做是 api 呼叫時的憑證資訊。

當我們客戶端想要從資料庫中獲取資訊時,我們就使用 http 的 get 方法呼叫 api 函式。然後監聽返回的 response 資料。

當我們客戶端想要往資料庫中儲存資訊時,我們就使用 http 的 post 方法呼叫 api 函式,從而達到往資料庫中儲存資訊的方法。

至於 http 的 put 和 delete 方法,用的比較少。

這是我的一點感悟,用詞不準確之處也敬請諒解。

即時服務端準確的說,應該是即時控制客戶端的邏輯;長時服務端準確的說,應該是儲存資料的資料庫的邏輯(其中封裝了大量 api)。客戶端在與這兩方進行通訊時,顯然採取了兩種方式,前者即時通訊,而後者採用了 api 的方式,request-response 的方式進行通訊。

很多客戶端軟體都是這樣的設計架構,也得益於這樣的設計架構,才讓我們的客戶端脫身於複雜的資料庫邏輯,在服務端的控制下更加靈活輕巧。

TCP客戶端與服務端通訊

客戶端 include include include include include in.h include include include include define maxline 1024 int main int argc,char ar 建立socketfd socketfd soc...

TCP通訊,多客戶端通訊(客戶端 服務端)

客戶端和伺服器間的交流,客戶端傳送資訊,伺服器接收到,並返回資訊 長連線建立socket連線服務端 指定ip位址,埠號 通過ip位址找對應的伺服器 呼叫socket的getinputstream 和getoutputstream 方法獲取和服務端相連的io流 輸入流可以讀取服務端輸出流寫出的資料 輸...

客戶端與服務端的Socket通訊

客戶端 public class client catch exception e public void start else catch exception e public static void main string args catch exception e 該執行緒專門用來迴圈讀取服...