多文件并发传输-------资源与节点的表示

mfct 关于资源与节点的表示

一:资源
这里的资源我们可以理解成 若干文件的集合
一些节点是拥有资源的
1 资源的存储 ***根路径***需要是一样的 而具体的路径可以不同的
2 资源也需要名称、以及ID还有版本号
3 需要文件的片段信息列表 (用于发送接收)
我们知道在接收时 需要依据路径来生成新的文件,并把文件内容写进去
在 进行文件的发送时 也需要先找到文件,同样需要文件路径
4 需要一个可以确定 文件的路径的成员

 private String appName;
 private String id;
 private String version;
 private String absoluteRoot;
 private List<ResourceStructInfo1> rsiList;
 private List<SectionInfo>  siList;

ResourceStructInfo1 类 (记录着文件片段的位置)

 private int   fileHandel;
 private String filePath;
 private int size;

二:节点

需要标识出是 资源服务器还是 客户端
以及对外提供 port ip 等信息
NetNode 实现这个接口即可

public interface INetNode1 {
          int SERVER = 1;
          int CLIENT = 0;
          
          String getIp();
          int getPort();
          int getType();
          int getSendTimes();
          void increaseSendTimes();
     }

三 : 节点和资源的关系

将资源和节点进行联系
节点可以进行注册自己的资源也可以进行 注销自己

// 需要用三个HashMap来存储 两个池子和一个关系
// 因为 每个node 以及resource都需要唯一的标识
// 所以要进行键值对的存储 而不能单纯地只用list 来存储
// 保证是单例的 “static final” 保证线程安全性:“concurrentMap”

public static final ConcurrentHashMap<Integer,  List<Integer>> rnRelationMap=
               new ConcurrentHashMap<>();
//   relationMap是以资源为键  以节点链表为值
//   因为 最后要给接收方发送拥有资源的节点列表  故以资源为键值
     public static final ConcurrentHashMap<Integer,  INetNode1> netNodePool=
               new ConcurrentHashMap<>();
     public static final ConcurrentHashMap<Integer,  ResourceBaseInfo1> resourcePool=
               new ConcurrentHashMap<>();

提供注册、注销、以及由资源 找到 节点列表的方法

还有一个很重要的问题版本号
我们建立一个 资源池子
添加资源的时候需要根据版本号判断一下

boolean  addResource(ResourceBaseInfo1 rbi){
          String appName=rbi.getAppName();
          ResourceBaseInfo1 oldrbi=resourcePool.get(appName);
          if(oldrbi !=null) {
               if(rbi.getVersion().equals(oldrbi.getVersion())) {
                    return false;
               }
               resourcePool.put(appName, rbi);
               return true;
          }
          resourcePool.put(appName, rbi);
          return true;
     }

为了增加内聚减少耦合,我们将创建一个类
将 资源和发送端接收端绑定

public class SendSectionInfo {
     private INetNode receiveNode;
     private INetNode sendNode;
     private ResourceBaseInfo rbi;
     }
全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务