2017-02-21 107 views
1

我已經對網絡套接字有所瞭解了,它們很棒,它們的問題在於它們必須保持連接暢通才能進行通信。從服務器到客戶端的請求

我有一個小系統,服務器不時必須更新狀態並通知客戶端,並且保持連接從每個客戶端打開並不是那麼理想。同時,客戶端更新必須及時進行,這一點非常重要。

所以我的問題是,如果服務器有一個唯一的地址客戶端有一個公共的臨時地址,服務器可以發送請求?因此,當客戶端連接到服務器時,它將提供唯一的地址,服務器將緩存它,當有更新時,服務器將把請求發送到該地址?

我知道地址會不斷變化會出現很多問題,但這已經是其他問題了。

回答

1

如果客戶端沒有專用的IP地址,那麼它不能從廣域網中獲得,除非它與其中的任何節點有開放連接。

當客戶端從本地網絡向服務器發送請求時,客戶端會記住客戶端的本地IP地址和端口,並使用NAT協議將其轉換爲路由器的空閒端口之一,然後使用路由器自己的「IP- IP協議頭中的發送者地址和TCP頭中的「發送者端口」。當路由器得到服務器的響應時,它使用內存中的NAT表將地址轉換回來並將數據傳送給客戶端。服務器和客戶端之間的連接處於打開狀態時,地址通常保存在NAT表中。因此,如果服務器和本地網絡客戶端之間沒有打開的連接,則服務器將無法與客戶端連接,因爲服務器不知道如何訪問它。

你說你有一個小系統。那麼爲什麼你認爲你的服務器沒有足夠的空閒端口來處理websocket?如果您只想從服務器獲取更新(而不是通過持續打開的連接發送和獲取數據),則可能會發現長輪詢或SSE更合適。它比websockets更容易實現。

相關問題