我需要已部分作为桌面应用程序的一个文件服务器应该尽可能快的传输文件的请求(从远程客户中,通常位于同一LAN)。会有很多的文件请求针对小型文件。服务器应当能够提供这两个上载和下载的服务。

我不是紧张到任何particual技术,所以我打开任何一种编程语言、工具包、图书馆,只要他们可以运行。

我最初采取的是用C++实现使用Windows座或使用的服务提供的图书馆如提高(asio或诸).我们还认朗,但是,我必须学会和所以性能的益处应该证明增加的发展的时候,由于具有学习语言。

后来的编辑:我更好的答案,说使用FTP或HTTP或基本上是什么,已经建立,但考虑到你还想写一个从零开始,你会怎么做?

有帮助吗?

解决方案

对于经常上传小的文件,最快的方法就是实现自己的专有协议,但这将需要相当大量的工作,也将是非标准,意味着今后的一体化将是困难的,除非你能够实现议定书中的任何客户的你会的支持。如果你选择这样做,无论如何,这是我的建议对于一个简单的协议:

  1. 命令:1节确定什么将可以完成:(0x01用于上载请求,0x02下载请求,0x11上传响应,0x12下载的响应,等等)。
  2. 文件名称:可以是固定的尺寸或作为前缀的一个字节的长度(假设的名字低于255字节)
  3. 校验,MD5例(如果上载请求或下载回应)
  4. 文件的大小(如果上载请求或下载回应)
  5. 有效载荷(如果上载请求或下载回应)

这可能是实施上的一个简单的TCP socket.你也可以使用UDP,避免了成本建立一个连接,但在这种情况下你要处理的重控制。

在决定之前实现自己的协议,看看HTTP等库libcurl,你可以做你的服务器使用标准HTTP的命令得到对下载和职位上传。这将节省大量的工作,你就可以测试的下载的任何网络浏览器。

另一个建议,以改善性能是使用的文件存储库不文件系统,但是喜欢的东西源码.你可以创建一个单一的表含有一个char列于文件的名称和一个blob列文件的内容。由于源码是轻量级的,并且有效缓存,则将大部分时间避免接盘开销。

我假定你不需要客户身份验证。

最后:虽然C++是你的喜好来给你原本机代码的速度,很少这是主要的瓶颈,在这种应用程序。最有可能将接盘和网络带宽。我提到这一点,因为在Java你可能能够使servlet做同样的事情(HTTP获得用于下载后上载)小于100行的代码。使用德比,而不是源码在这种情况下,把那servlet在任何容器(Tomcat,我们等)和它的完成。

其他提示

为什么不去 FTP?你应该能够找到一个适当的服务器实现的任何语言,而客户访问图书馆。

这听起来想了很多轮重塑。授予、FTP不理想,并且有一些奇怪的斑点,但是...它的存在,这是标准的、众所周知的,并且已经非常广泛的实施。

如果所有的机器都运行在窗户上的相同的局域网,为什么你需要一个服务器?为什么不简单地用Windows文件的共享?

我会建议不要使用FTP或蔽的,或者任何其他面向连接技术。相反,去无连接的协议或技术。

其原因是,如果您需要很多的小文件上传或下载,并且应该尽可能快的,你想要避免的成本设立和摧毁了连接。

我建议你看看使用现有实施或执行自己HTTP或HTTPS server/服务。

你的瓶颈可能来自以下来源:

  • 硬盘I/O-WD迅猛的是应该有一个随机存取速度的约100MB/s。此外,重要的是你是否设置了它作为RAID0,1、5或什么的穷人。一些读快,但编写缓慢。权衡。

  • 网络I/O-假设你已经最快的harddisks在一个快速袭安装,除非你使用千兆I/O,网络将是缓慢的。如果你管大,你仍然需要提供的数据。

  • 记忆缓存-内存文件系统的高速缓存都将需要足够大的缓冲区的所有网络I/O因此,它并不你慢下来。这将需要大量的存储器的那种工作你看。

  • 文件系统的结构假设你有千兆字节的记忆,然后瓶颈最有可能将数据结构中,你使用文件的系统。如果文件系统的结构是麻烦它会减慢你的速度。

假设所有其他问题都解决了,然后你不用担心你的应用程序本身。注意到,大多数的瓶颈之外的软件的控制。因此,无论你的代码这C/C++或使用特定的图书馆,你仍然会在该怜悯的操作系统和硬件。

听起来像是你应该使用 蔽(SSH)服务器, 它的防火墙/NAT安全、保安,并已经没有什么你想要更多。你也可以使用SAMBA或windows文件共享一个更简单的执行情况。

为什么不使用现有的东西,例如一个正常的网络服务器处理的很多小型的文件(图像)非常好快。

和很多人已经花了时间在优化的代码。

和第二个好处是,转让是完HTTP这是一个既定的协议。很容易切换到SSL如果你需要更多的安全。

用的上载,他们也没有问题的一个脚本或定制的模块相同的方法还可以添加的授权。

只要你不需要动态求的文件,我想这将是一个最好的解决方案。

这是一个新的组成部分以现有的桌面应用程序?什么目标的服务器?它是保护的文件,这些文件上载/下载,并提供认证和/或授权?不提供某种结构上载到会存在?

一种选择可要安装服务器Apache HTTP的机和服务的文件通过。使用岗位上传和获得下载。

如果客户是在一个局域网可你不仅仅是分享驱动器?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top