2010-07-01 100 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服務器處理它呢?他們認爲在向多個客戶端提供相同的文件方面很好。