簡體   English   中英

優先套接字通信

[英]Prioritized socket communication

我在移動設備和PC(服務器)之間進行客戶端-服務器通信。 在通信中,我有四個套接字:其中兩個套接字用於發送和接收數據,另外兩個套接字用於某種保持活動狀態,因為我需要盡快檢測到斷開連接。

只要連接正常,數據就可以毫無問題地傳輸。 但是我想建立一些優先級,以確保保持活動(記住:兩個套接字)通道始終在發送數據,除非服務器-客戶端之間的連接已斷開。

我該如何實現?

謝謝你的幫助。

我會用四個插座質疑您的設置。

首先,使用單獨的連接來發現遠程端點何時死亡並不會給您帶來任何好處,但是實際上,當“保持活動”連接斷開但“數據”連接仍然完好時,就會引入競爭狀態。 沒有活動時,通過相同的數據連接實施定期心跳。

然后,相同節點之間的兩個獨立數據連接爭奪帶寬。 網絡堆棧通常不會跨連接邊界進行優化,因此您將獲得兩倍的TCP開銷,而毫無收獲。 在相同的TCP連接上實現數據交換-您將獲得更好的吞吐量(也許以較小的延遲增加為代價,但是只有良好的衡量才能證明這一點)。

最后但並非最不重要的一點是,四個連接需要四個偵聽TCP端口,因此防火牆中某個位置可能有四個孔。 將其減少到一個端口,該防火牆的管理員將永遠是您的朋友。

使用TCP進行傳輸時,只要您嘗試發送數據並且(TCP)連接斷開,TCP協議棧就會通知您。 如果您同時控制服務器和客戶端代碼,則可以在通過TCP進行的數據傳輸之間實現心跳。

如果出於您的目的,在各個設備上的TCP連接故障檢測速度太慢,則可以在客戶端和服務器之間實施某些單個數據包ping-pong方案,例如“ SNMP echo request”(又稱為“ ping”),或者如果沒有SNMP選項,也許來回發送UDP數據包將達到目的。

無論如何,您都需要某種超時機制(已在TCP堆棧中實現),這意味着斷開連接的檢測將被延遲,延遲時間受超時持續時間限制。

暫無
暫無

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

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