以前我问过这个问题: Read quicktime movie from servlet in a webpage? 基本上我使用servlet将电影文件流式传输到浏览器上的quicktime插件(为了在根目录之外播放文件)。最后Ryan Fernandes问我有关并发问题的问题。 我这里没有真正的问题。
使用servlet流式传输文件和对流方法之间的主要区别无论如何,服务器仍然需要将文件流式传输到客户端?如果没有,在后一种情况下,服务器实际上如何将文件流式传输到插件?
Ryan还询问了使用servlet的性能。因为它占用了大量内存?当我们使用backing bean或jsf,jsp(基于servlet)时,如果许多用户同时访问,则创建的实例数量很大。它还需要大量内存,我们如何解决它?
请帮我解决这些问题。如果你有关于这些问题的任何好文章:并发,多线程,性能可以与我分享,我是一个新手。 非常感谢你。 问候 K.
答案 0 :(得分:2)
好吧,如果你的意思是这个评论:
您期望这个servlet同时服务多少用户?是 你确定你创建Fileinputstream的I / O正在进行中 为多个并发请求工作?
然后他的意思是,如果您尝试手动打开100个单独的线程,则可能会出现问题。
网络服务器如何处理这种情况不应该给你带来麻烦,因为他们可以以任何他们想要的方式实现它。
关于主要问题,这是我在javadoc中找到的内容:
class FileInputStream public FileChannel getChannel()
返回与此文件输入流关联的唯一FileChannel对象。
class FileChannel
多个并发线程可以安全地使用文件通道。可以在Channel接口指定的任何时间调用close方法。在任何给定时间,只有一个涉及通道位置或可以更改其文件大小的操作可能正在进行中;在第一个操作仍在进行时尝试启动第二个此类操作将阻塞,直到第一个操作完成。其他操作,特别是那些采取明确立场的操作,可以同时进行;他们实际上是否这样做取决于基本的实施,因此没有具体说明。
答案 1 :(得分:0)
构建Web服务器以提供文件。这是Web服务器的主要功能。它经过优化可以做到这一点。你必须问自己:为什么不把这个filename.mov文件放在服务器上的某个地方让服务器流呢?根本没有java,只有http://myserver.com/static/filename.mov。当然,这并不总是一个选择,但我想Ryan问你是否考虑过它。
我没有看到代码中的并发性问题。所有变量都是本地变量,每个线程都将获得自己的输入和输出流。但同样的论点适用于此:为什么不让web服务器处理呢?他们认为善于向多个客户端提供相同的文件。