java - 使用 java 套接字向多个客户端传输大文件的最佳方法

标签 java multithreading sockets io nio

我进行了很多研究,但找不到任何适合该主题的内容,因此在这里提出问题。

我想使用java套接字构建一个像dropbox这样的应用程序,并带有一个社交媒体网站,我们在共享文件夹上上传的文件会自动下载或同步到我们在社交媒体网站中添加的所有 friend 系统上。

到目前为止,我的想法是我将运行一个服务器,每次客户端连接(登录)时,我将启动 2 个处理程序,1 个用于上传,1 个用于下载。下载处理程序将每 5 分钟检查一次来 self 所有 friend 的新文件(意味着他们在共享目录中添加新文件)并同步它。当处理程序从客户端接收到文件时,上传处理程序会将文件上传到服务器上,并将其作为字节数组发送。客户端使用目录观察器将数据发送到服务器以跟踪目录中的更改。

现在的问题是每个客户端启动2个线程,是否可行?我认为这会严重减慢服务器速度,因为我想象有 100 个客户端,也就是说有 200 个线程。你们能否指出我应该采取什么方法的正确方向,我读到了 NIO 和 IO 并感到困惑。还有什么特定的图书馆可以提供帮助吗?我查看了 Netty、apache mina,但不明白它们有何帮助。

提前致谢:)

最佳答案

推荐你看看这篇关于NIO的文章:https://today.java.net/pub/a/today/2007/02/13/architecture-of-highly-scalable-nio-server.html 。还要尝试考虑可扩展性,如果您的服务器发送文件......您的硬盘驱动器的速度是多少?我认为它比线程数更重要;但要注意线程锁紧。 为什么你想要实现网络做得如此出色的东西?如果我是你,我会尝试考虑一个比所有处理字节的东西更好的安全代理。即使您想分多个部分传输文件,您也可以使用多部分 zip 文件并以编程方式下载每个部分,然后重建文件。通过这种方法,您可以重用 Web 和客户端的基础设施;您还可以受益于现代 Web 服务器的高 IO 吞吐量。

关于java - 使用 java 套接字向多个客户端传输大文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29356008/

相关文章:

java - java.net.SocketException : Connection reset and java.net.SocketException : Broken Pipe? 有什么区别

java - Java Web Start 的替代品?

java 8 如何仅从 SummaryStatistics 返回总和和计数值

java - Java中创建大量点的算法

java - 当我捕获异常并记录它时,日志仅显示异常名称,而不是异常堆栈

java - 如何从 Java 执行完全独立的应用程序。喜欢独立进程

java - 测试 SimpleDateFormat 的多线程调用

java - 我需要显式导入 Thread 类吗?

java - 无法通过 Java 套接字发送消息而不关闭它

java - 如何将多播范围明确限制为仅 1 跳?