两个服务器提供文件共享服务。 1. 服务器A和服务器B提供文件上传下载服务。服务器A是主服务器,服务器B是备用服务器。 
2. 有5个客户端同时上传不同的大文件(200M~500M),当上传开始1分钟后随意启动N个客户端(命令行输入),每个客户端在这5个上传中的文件中随机选择一个文件下载 
3. 中间突然停掉服务器A并保持服务器B继续服务 整个过程能顺利进行,所有下载的文件是完整并且正确的。请用Java编写,不用写界面。
想了很久不知道怎麼實現,請會的同學幫忙下。OK的話另外再送分。鬱悶了。

解决方案 »

  1.   

    首先,需要澄清的一点是,一般的文件共享服务中,对于正在上传过程的文件是不能够同时下载的。
    楼主所要表述的项目,应该是类似于一个原始简易BT资源共享架构吧。既然场景如此,可以考虑,编写三个程序,一个主服务器程序,一个备服务器程序,一个客户端程序。
    以及两份协议,一个主备服务器之间,数据同步的协议(采用长连接),一个文件上传下载的协议。1。两个服务器程序都要保存一份同步时间戳,一份共享资源列表以及相互间的IP等信息。
    2。两个服务器要定时校验彼此的同步时间戳,如果不同,则发送资源列表给对方,
          相互校验资源信息,完成资源的同步。
    3。客户端连接主服务器时,主服务器将备用服务器的相关信息发送给客户端,留作备用。
    4。主服务器在接收文件的同时,将数据传送给备用服务器,文件一般都会被人为的拆分成若干块进行传输。
    5。当主服务器断电时,上传客户端直接连接备用服务器,查找备用服务器与主服务器的同步过来的数据位置,
          进行后续的传输过程。上述的资源表中,也应记录当前文件的传输进度,以便此时快速定位。
    6。下载客户端在主服务器断电时,直接连接备用服务器,查询资源的数据位置,进行后续的传输。
      

  2.   

    其实没有什么难的,关键是文件的拆分和组合。而且拆分的越细,系统可靠性越高。可以自己写API或直接用open source API.