一 前言

  本文是《JDFS:一款分布式文件管理实用程序》系列博客的第二篇,在上一篇博客中,笔者向读者展示了JDFS的核心功能部分,包括:服务端与客户端部分的上传、下载功能的实现,epoll的运用,线程池的运用等。当然目前JDFS还仅仅支持上传、下载功能,还不具备分布式文件管理的功能,这些都会在后续的开发过程中加进来。在写博客的过程中,笔者发现最好是每完成一个小的功能就及时用博客记录下来,如果等功能全部实现完成后再写博客的话,一方面由于功能点比较多,博客写起来会比较费力;另一方面由于时间间隔太长,有些有价值的细节恐怕会忘记。所以最好是增量式写博客,每实现一个关键点的功能,及时用博客记录下来。本文是在该系列博客第一篇的基础上做了部分更新升级以及解决一些小bug.当然主要针对的是上传部分的功能。如果读者对这篇博客的背景不是太了解的话,请先移步笔者的上一篇博客:点击我 。

  根据上一篇博客我们知道,JDFS的服务端主程序在epoll里面先recv客户端的数据,然后解析头部,根据请求类型,把作业交给线程池来执行。对于查询、下载部分的功能这是没有问题的,因为查询、下载部分客服端只是发送一个头部过来,服务端接收后解析的过程不会太占用多少时间。而如果是上传功能的话,服务端recv到的数据不仅包含头部而且包含客服端期望上传的文件实体的数据,而笔者的本意是让线程池来接收数据的,所以这个代码的实现与笔者的期望是矛盾的。本文首先就会对这一点进行更新改进,使得查询、上传、下载都可以并行的被线程池来执行。

  另外在上一篇博客中,上传部分的功能代码比较粗糙,这次也进行了一些更新改进。在笔者测试上传功能的时候,发现了一些偶尔出现而且不容易重现的bug,而下载功能目前为止在笔者的测试过程当中还没有遇到过bug。所以从代码实现以及测试的过程来看,上传部分的功能要比下载部分复杂、更难调试。具体代码实现请移步笔者的github链接:点击我

   PS: 本篇博客是博客园用户“cs小学生”的原创作品,转载请注明原作者和原文链接,谢谢。

二 上传功能演示

  在上一篇博客中,笔者展示了上传功能的截图,但那个只有一个客户端在向服务端上传文件,在这里再补充一个同时有两个客服端向服务端上传文件的截图。

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

  在此次的上传中(使用shell脚本来提交),两个客服端分别同时向服务端上传不同的文件:CRLS-en.pdf和CRLS-e.pdf. 图左半边是服务端打印的一些信息,我们可以清晰的看到服务端交叉的接收CRLS-e.pdf和CRLS-en.pdf。图右半边是客服端打印的一些消息,我们也可以清晰的看到客服端也是交叉上传两个文件。服务端最后三次接收是:CRLS-e.pdf、CRLS-en.pdf、CRLS-en.pdf,客服端最后三次上传的是CRLS-en.pdf、CRLS-e.pdf、CRLS-en.pdf,可见客服端上传和服务端接收的文件的次序并不是一致的。但是从图中我们也可以很容易的发现:对于同一个文件,服务端接收的次序和客服端发送的次序是一致的。

  下图是服务端接收完成后的截图:

网友评论