我有客户需要全部连接到单个服务器进程。我正在使用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