我是一个相对新手的程序员,对 java 很陌生,我的任务是创建一个运行两种类型的应用程序的分布式系统;一个“服务器/路由器”和任意数量的客户端-服务器“节点”。
- 服务器/路由器将维护一个客户端连接信息表
- 节点在生成时将各自发送连接信息
- 节点 A 可以从节点 B 请求文件 F
--- 这个请求被发送到路由器,它查找 B 的连接信息并发送一个请求 F
---B 开始将 F 流式传输到路由器,路由器又将 F 流式传输到 A
这是一般的想法。如果不是因为我以前从未做过任何分布式计算,这听起来会相当简单......所以我的问题不是如何更正代码,而是我的设计是否可行(和如果不会,我该如何纠正)
所以我的想法是创建一个公共类AVRouter,另一个类AVNodeInfo,和一个第三类ConnectionMap;AVRouter 将有一组 AVRouterInfo 对象,其中包含每个节点的名称、端口号和 IP 地址。它还将有一个 ConnectionMap 对象队列,我很快就会讲到。
AVRouter 将有一个 ServerSocket 专用于在节点启动时从节点接收连接信息,并用所述数据填充其 AVNodeInfo 表。它将有另一个用于文件请求的端口;它将使用请求者和响应者的连接信息来生成 ConnectionMap 对象,并将其添加到队列中。
这个想法是,虽然队列中有 ConnectionMaps,但它将使用第一个来促进传输。
最后一个类,AVNode,要简单得多;在生成时它将其信息发送到路由器,然后它等待用户输入以命名另一个节点以及它希望从该节点请求的文件。当一个请求可用时,它将向路由器发送一个完整的请求。
处理 AVNodeInfo 表的逻辑可能只是用超时处理——如果节点发出请求已经 X 时间,该节点将自行终止,并且该表将自行将其从表中删除......这个是一个小规模的概念验证类型的项目,所以它还没有真正在处理这个细节的范围内。
所以我实际上有两个问题:
1)这个设计会很好,还是应该改进?
2) 在没有真正完成从 A 到 B,然后从 B 到 C 的传输的情况下,如何准确地处理从源 A 通过路由器 B 到目标 C 的流数据?
我希望这个问题在 StackOverflow 的范围内;我知道它是设计而不是代码,但我相信它足够具体。