簡體   English   中英

TCP推挽套接字服務器設計

[英]TCP push-pull socket server design

我正在設計一個跨平台的消息服務作為一項學習練習。 我以前曾經對基於套接字的服務器進行過編程,但始終像Web服務器一樣采用“客戶端輪詢服務器”設計。 我希望能夠定位到移動平台,並且我讀到輪詢會消耗大量電池,因此我想進行推送通知。

該服務器將基於C ++,基於TCP。 我遇到麻煩的是如何管理設計的雙向性。 我需要一個客戶端能夠像往常一樣將數據包發送到服務器,而且還要偵聽數據包。 我該如何緩解這種情況,例如,當服務器嘗試向客戶端發送數據時客戶端正在發送數據,或者它阻止了偵聽數據,但隨后又需要發送數據?

例如,考慮以下粗圖:

原始圖

因此,假設客戶端A正在發送大量數據(箭頭1)。 發生這種情況時,客戶端B發送一條消息(箭頭2),這導致服務器嘗試將數據發送回客戶端A(箭頭3),但是客戶端A尚未完成箭頭1的發送。 在這種情況下會發生什么? 是否應該在每個客戶端上設置2個單獨的端口,一個用於入站,一個用於出站? 我需要跟蹤每個連接的狀態嗎?

還是有更好的方法來解決這個問題?

一個套接字端口本質上是雙向的。 要或多或少同時處理入站和出站流量,您需要使用非阻塞套接字。

我認為解決方案非常簡單。 TCP服務器應具有連接的客戶端的列表。 由於TCP連接是雙向的,因此推送機制非常簡單。

另一重要的事情是,只要您的服務器不是多線程的,您就可以同時讀取或寫入一個客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM