2010-07-01 167 views
1

以前我问过这个问题: Read quicktime movie from servlet in a webpage? 基本上我用一个servlet来串流播放电影文件浏览器的一个插件的QuickTime(为了演文件根目录之外)。最后Ryan Fernandes问我关于并发问题的问题。 我在这里没有真正解决这个问题。并发在Java EE应用程序

  • 什么是使用servlet来流的文件和convetional方法反正之间的主要区别,服务器还是要流的文件给客户?如果没有,在后面的情况下服务器如何将文件流式传输到插件?

  • 瑞恩还问了关于使用servlet的性能。导致它耗尽大量内存?当我们使用backing bean或jsf,jsp(基于servlet)时,如果许多用户同时访问,创建的实例数量巨大。它也需要大量的记忆,我们如何解决它?

请帮我解决这些问题。如果你有任何有关这些问题的好文章:并发,多线程,性能可以与我分享,我是一个新手。 非常感谢。 问候 K.

回答

2

好吧,如果你的意思是这样评论:

有多少用户,你希望这个servlet并发服务? 您确定您创建Fileinputstream的I/O将会在 以上的几个并发请求中工作吗?

然后他的意思是,如果您尝试用100个单独的线程手动打开相同的文件,可能会有麻烦。

web服务器如何处理这种情况不应该给你带来麻烦,因为他们可以以任何他们想要的方式实现它。

由于有关的主要问题,这里是我在javadoc中找到:

class FileInputStream 
public FileChannel getChannel() 

返回与此文件输入流有关的唯一FileChannel对象。

class FileChannel 

文件通道可安全地由多个并发线程使用。按照Channel接口的规定,可以随时调用close方法。在任何给定的时间,只有一个涉及频道位置或可以更改文件大小的操作可能正在进行;尝试在第一个操作仍在进行时启动第二个操作将会阻止,直到第一个操作完成。其他行动,特别是那些采取明确立场的行动,可能会同时进行;他们是否实际上这样做是依赖于基础实施,因此是未指定的。

+0

嗨马克斯,所以这里的问题是管理读取文件的并发性,而不是使用servlet的权利? – 2010-07-02 01:48:20

+0

是的,您指出的评论是指文件读取并发问题。使用FileInputStream完全解决了这个问题,正如您从javadoc中看到的一样。 – bezmax 2010-07-02 15:57:12

+0

谢谢Max。你是对的。我发现servlet能够处理并发请求 – 2010-07-09 03:24:34

0
  • Web服务器是建立服务档案。这是Web服务器的主要功能。它被优化来做到这一点。你必须问自己:为什么不把这个文件名.mov文件放在服务器的某个地方,并让服务器把它流?根本没有java,只有http://myserver.com/static/filename.mov。当然,这并不总是一种选择,但我想瑞恩问你是否考虑过它。

  • 我在代码中看不到任何并发问题。所有变量都是本地的,每个线程都会得到自己的输入和输出流。但是同样的论点适用于这里:为什么不让Web服务器处理它呢?他们认为在向多个客户端提供相同的文件方面很好。