根据JAVA的CS模型框架做了一个简易的分布式文件系统
一,引言
计算机通过文件系统管理、存储数据,而信息爆炸时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。分布式文件系统可以有效解决数据的存储和管理难题。人们在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。根据此需求做了一个简易的文件系统
根据之前做的CS框架,在此基础上添加了文件传输的功能。
当一个用户A想服务器请求文件时,服务器如果有该文件,则则向该客户端发送文件,如果没有该文件,服务器会广播所有客户端,某个用户B有该文件,则B会向该服务器发送文件,服务器端会保存该文件,然后服务器再向该A用户端发送该文件。下次某个客户端再此请求请求该文件,直接由服务器向该客户端发送该文件。
二,核心技术
客户端请求文件发送的字符串是命令格式,采用两种命令格式,一个是判断底层网络是否通畅,2,是文件传输层的命令格式,主要判断是接受文件,是发送文件,客户端上线,下线等信息,(由于命令和文件采用的io流不同),根据命令格式来解析,上层该做什么,该转发,该接受,以及客户端上线等问题。
三,遇到的问题
1,比如当服务器向客户端发送文件时,服务器发送完文件,客户端也接受完文件,但是客户端的read()不能结束,查了资料才知道此方法是阻塞方法,最后通过服务器先发送文件长度,客户端接受文件长度,当客户端接受到的文件长度相等本来的文件长度,就打破循环。
2.当将此程序做出来后,在本机上运行,测试,都很成功,于是天真的把代码拿到统一路由器的下的舍友电脑上运行,他是客户端总连接不上我的服务器,查了很多资料,原来是外网与内网连接之间的问题,我服务器是在内网,舍友的客户端必须通过端口映射和内网穿透才能解决,然后通过设置客户端的端口号和ip地址,就解决了此问题
四,总结
1.不足
没有来得及做客户度与服务器的界面,还有就是,客户端与服务器连接的时间比较短,还有的是,采用的是单线程传输文件,导致效率不高,下次应该做多线程发送文件片段,然后进行文件组装。
在下次要将这些问题解决。
源码 链接:https://pan.baidu.com/s/1Zdo8VN1gDQqWcHJzEr-npQ 密码:59e9