2011-11-10 9 views
0

私は自分のアプリケーション・サーバ として私のプロジェクトおよび組み込みnetty3を開発する遊びを使用し、次のテストコードを確認してください:play(netty3)のアップロードでシングルスレッドが使用されるのはなぜですか?

私が同時にファイルをアップロードするために2つのブラウザ(FirefoxとChromeを)開け
package controllers; 
import java.io.File; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.atomic.AtomicInteger; 

import org.apache.commons.io.FileUtils; 

import play.Logger; 
import play.Play; 
import play.mvc.Controller; 
import play.mvc.results.RenderText; 

public class Upload extends Controller { 

    private static Integer counter = 0; 
    private static final Integer MAX = 1; 

    public static void index() { 
     render("/upload.html"); 
    } 

    public static void upload(File file) { 
     System.out.println("start " + Thread.currentThread()); 
     synchronized (counter) { 
      System.out.println("middle " + Thread.currentThread()); 
      if (counter > MAX) { 
       renderText("Sorry, the max upload thread is " + MAX); 
      } else { 
       counter++; 
       uploadFile(file); 
       counter--; 
       renderText("Upload success"); 
      } 
     } 
     System.out.println("end " + Thread.currentThread()); 
    } 

    static void uploadFile(File imgFile) { 
     File file = Play.getFile("/uploads"); 
     try { 
      FileUtils.copyFileToDirectory(imgFile, file); 
     } catch (IOException e) { 
      Logger.error("upload file error", e); 
     } 
    } 

} 

を、私は 'アップロード(ファイルファイル)'メソッドでブレークポイントをデバッグしました。しかし、私はスレッドが1つしか処理されていないことが分かった その後、2番目のリクエストが来ました。

start Thread[play-thread-1,5,main] 
middle Thread[play-thread-1,5,main] 
start Thread[play-thread-1,5,main] 
middle Thread[play-thread-1,5,main] 

しかし、Tomcatの/突堤では、コンソールに2つのスレッドの出力がありました:

出力されます。

どのような身体も前に同じ問題を抱えていましたか?

+0

あなたはNetty 3ですか? Netty 3はまだリリースされていません。 – Jonas

答えて

4

Devモードで実行しているとしますか?

プレイドキュメントでは、デバッグを簡単にするため、デフォルトではDevモードの単一スレッドモデルで実行され、プロダクションモードではnumbers_of_cores + 1として実行されます。

これは、application.confでオーバーライドできます。

# example of using a thread pool of 3 
play.pool=3 
+0

ありがとう、Codemwnci。私は、PlayがDEVに1つのスレッドを使用していることに気付かなかった。 – superleo

関連する問題