我有客戶需要全部連接到單個服務器進程。我正在使用UDP發現爲客戶端查找服務器。我有客戶端和服務器交換IP地址和端口號,以便完成發現後可以建立TCP/IP連接。這樣數據包大小保持很小。我看,這可能在使用UDP兩種方式之一進行:UDP服務器發現 - 客戶端應該發送多播發現服務器還是應該服務器發送常規信標?
- 每個客戶端在搜索服務器,然後服務器響應的發出自己的多播消息。客戶端可以定期重複發送此多播消息(在服務器關閉的情況下),直到服務器響應。
- 服務器定期發送一個多播消息信標。客戶端訂閱多播組並以這種方式接收服務器的多播消息並完成發現。
1.如果有很多客戶端,那麼最初會有很多多播消息(每個客戶端發送一個)。只有服務器將訂閱並接收來自客戶端的多播消息。一旦服務器響應客戶端,客戶端就停止發送多播消息。一旦所有客戶端都完成對服務器的發現,則不會在網絡上傳輸其他多播消息。但是,如果服務器關閉,則每個客戶端會間隔發送多播消息信標,直到服務器備份並可以響應。
2.只有服務器定期提交多播消息信標。這條消息最終會被路由到所有訂閱了多播組的客戶端。一旦客戶端收到數據包,客戶端的UDP監聽套接字就會關閉,並且不再訂閱多播組。但是,服務器必須繼續發送多播信標,以便新客戶端可以發現它。無論客戶是否需要發現,它都會定期繼續發送信標。
所以,我看到優點和缺點。在我看來#1最初會導致更重的負載,但是這個負載最終減少到零。在#2服務器將繼續發送一個燈塔永遠。
UDP和多播對我來說是一個相當新的話題,所以我有興趣找出哪些是首選方法,哪些會導致較少的網絡負載。
您是否明確決定不使用標準服務發現機制? – Duck 2009-07-30 05:05:43
當你說標準的服務發現機制時,你能否澄清一下你認爲的是什麼。我正在「發現」我的選擇以及採取的最佳方法。 – Elan 2009-07-31 06:12:04