通过 UDP 广播检索可用的客户端
Retrieve available clients via UDP broadcast
我目前正在开发一个 "node-based" 系统,服务器将在专用网络上发送 UDP 广播(使用自定义协议),该广播将由支持指定协议的多个不同客户端接收.服务器将在请求后在一些客户端之间进行选择以获得更稳定的 TCP 连接。
请求客户端序列
- 服务器向网络上的每个 device/node 广播一个 request-for-ip 消息。
- 支持该协议的所有可用客户端将使用其唯一 IP 响应服务器。
- 服务器通过 请求连接 消息在客户端中进行选择。
- 服务器选择的客户端通过 TCP 连接到服务器以获得可靠连接。
我的问题
我对 TCP 和 UDP 都有很好的了解,但我以前从未设计过这样的系统。您认为这个系统是以正确的方式构建的,还是有更多 "standard" 的方式来做类似的事情?你有什么想法?
谢谢!
--- 编辑 ---
添加了程序图。
有一个在网络上发布服务的标准协议,您可能会考虑:Simple Service Discovery Protocol,基于周期性 UDP 多播:
The Simple Service Discovery Protocol (SSDP) is a network protocol based on the Internet protocol suite for advertisement and discovery of network services and presence information. It accomplishes this without assistance of server-based configuration mechanisms, such as Dynamic Host Configuration Protocol (DHCP) or Domain Name System (DNS), and without special static configuration of a network host. SSDP is the basis of the discovery protocol of Universal Plug and Play (UPnP) and is intended for use in residential or small office environments.
在此协议中,客户端加入该 UDP 多播组以发现本地网络服务并启动与它们的连接(如果他们愿意)。这几乎是该协议的预期用例,与您的用例有些不同。
IP/UDP 多播的一个好处是,如果主机上没有进程加入该多播组,多播数据包可以在网络适配器中被丢弃。另一个是 IP/UDP 多播可以跨网络路由。
根据您发布的图表:
- 服务器是中介(设计模式),其位置必须为分布式系统的所有其他进程所知。
- 客户端需要connect/register与服务器。
- 您的主客户端是一个控制应用程序。
服务器通过 UDP 多播来宣传自己是有意义的。
在线客户端将在启动时或 TCP 连接丢失时使用 TCP 连接到服务器。如果客户端因任何原因终止而导致 TCP 连接中断并且服务器会立即意识到这一点,除非客户端已关闭电源或其 OS 崩溃。如果没有数据从服务器传输到客户端,您可能希望为服务器启用频繁的 TCP 保持活动以尽快检测死客户端。同样适用于客户。
服务器和客户端之间的所有通信都通过 TCP 进行。否则,您将需要通过 UDP 或使用 PGM 实现可靠的消息传递,这可能需要大量工作。多播 UDP 应该只用于服务器发现,而不是需要可靠传送的双向通信。
主客户端也连接到服务器,可能在另一个端口上,以进行控制。主客户端可以发现所有可用的服务器(如果有多个)并允许用户选择要连接的服务器。
我目前正在开发一个 "node-based" 系统,服务器将在专用网络上发送 UDP 广播(使用自定义协议),该广播将由支持指定协议的多个不同客户端接收.服务器将在请求后在一些客户端之间进行选择以获得更稳定的 TCP 连接。
请求客户端序列
- 服务器向网络上的每个 device/node 广播一个 request-for-ip 消息。
- 支持该协议的所有可用客户端将使用其唯一 IP 响应服务器。
- 服务器通过 请求连接 消息在客户端中进行选择。
- 服务器选择的客户端通过 TCP 连接到服务器以获得可靠连接。
我的问题
我对 TCP 和 UDP 都有很好的了解,但我以前从未设计过这样的系统。您认为这个系统是以正确的方式构建的,还是有更多 "standard" 的方式来做类似的事情?你有什么想法?
谢谢!
--- 编辑 ---
添加了程序图。
有一个在网络上发布服务的标准协议,您可能会考虑:Simple Service Discovery Protocol,基于周期性 UDP 多播:
The Simple Service Discovery Protocol (SSDP) is a network protocol based on the Internet protocol suite for advertisement and discovery of network services and presence information. It accomplishes this without assistance of server-based configuration mechanisms, such as Dynamic Host Configuration Protocol (DHCP) or Domain Name System (DNS), and without special static configuration of a network host. SSDP is the basis of the discovery protocol of Universal Plug and Play (UPnP) and is intended for use in residential or small office environments.
在此协议中,客户端加入该 UDP 多播组以发现本地网络服务并启动与它们的连接(如果他们愿意)。这几乎是该协议的预期用例,与您的用例有些不同。
IP/UDP 多播的一个好处是,如果主机上没有进程加入该多播组,多播数据包可以在网络适配器中被丢弃。另一个是 IP/UDP 多播可以跨网络路由。
根据您发布的图表:
- 服务器是中介(设计模式),其位置必须为分布式系统的所有其他进程所知。
- 客户端需要connect/register与服务器。
- 您的主客户端是一个控制应用程序。
服务器通过 UDP 多播来宣传自己是有意义的。
在线客户端将在启动时或 TCP 连接丢失时使用 TCP 连接到服务器。如果客户端因任何原因终止而导致 TCP 连接中断并且服务器会立即意识到这一点,除非客户端已关闭电源或其 OS 崩溃。如果没有数据从服务器传输到客户端,您可能希望为服务器启用频繁的 TCP 保持活动以尽快检测死客户端。同样适用于客户。
服务器和客户端之间的所有通信都通过 TCP 进行。否则,您将需要通过 UDP 或使用 PGM 实现可靠的消息传递,这可能需要大量工作。多播 UDP 应该只用于服务器发现,而不是需要可靠传送的双向通信。
主客户端也连接到服务器,可能在另一个端口上,以进行控制。主客户端可以发现所有可用的服务器(如果有多个)并允许用户选择要连接的服务器。