0

私はSpring MVC FrameWorkを使ってシステムを開発していますが、私のアプリはリクエストを1つずつ処理することを発見しました。私のアプリはLinuxのtomcatサーバーにデプロイされました。Spring Concurrency並列リクエスト

これを確認するには、最初に開始時間を取得してから10秒間スリープしてから終了時間を得て、それらを表示する単純なページを作成しました。それから、ブラウザでこのページに同時に3回アクセスします。以下の結果は、サーバーが一度に1つの要求しか処理しないことを確認します。

スタート:木6月2日午後5時01分24秒CST 2016 終了:木6月2日午後5時01分34秒CST 2016 TimeLapsed:10001

スタート:木6月2日午後5時01分34秒CST 2016 終了:木6月2日17時01分44秒CST 2016 TimeLapsed:10001

スタート:木6月2日17時01分44秒CST 2016 終了:木6月2日午後五時01分54秒CST 2016 TimeLapsed:10001

マイコントローラコード:

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import java.util.Date; 
@Controller 
@RequestMapping("/") 
public class ParallelTestController { 
    @RequestMapping(value="/test", method = RequestMethod.GET) 
    public String test(ModelMap model) { 
     String startTimeStr = new Date().toString(); 
     long startTime = System.currentTimeMillis(); 
     try{ 
      Thread.sleep(10000); 
     }catch(Exception e){ 
     } 
     String endTimeStr = new Date().toString(); 
     long endTime = System.currentTimeMillis(); 
     long totalTime = endTime - startTime; 
     model.addAttribute("startTime", startTimeStr); 
     model.addAttribute("endTime", endTimeStr); 
     model.addAttribute("totalTime", totalTime); 
     return "welcome"; 
    } 
} 

マイビューコード:

<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
       http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
<display-name>EMS</display-name> 
<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
</web-app> 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>HelloWorld page</title> 
</head> 
<body> 
    Greeting : ${greeting} 
    <br /> 
    Start : ${startTime} 
    <br /> 
    End : ${endTime} 
    <br /> 
    TimeLapsed : ${totalTime} 
    <br /> 
</body> 
</html> 

web.xmlがどのように私は同時に複数の要求を処理するために私のアプリを設定することができますか?または、tomcatの設定ですか?

+0

スレッドを見てみましょう。 'System.out.println(Thread.currentThread()。getName());'を追加し、各リクエストのログを記録します。 – codependent

+0

スレッド:http-bio-8080-exec-23開始日:6月2日17:49:51 CST 2016終了日:6月2日17:50:01 CST 2016時間経過:10001 \t \t スレッド:http-bio-8080 -exec-24 Start:Thu Jun 02 17:50:03 CST 2016終了:6月2日17:50:13 CST 2016 TimeLapsed:10000 \t \t スレッド:http-bio-8080-exec-28開始日:Thu Jun 02 17:50:13 CST 2016終了:6月2日17:50:23 CST 2016 TimeLapsed:10000 – akoayisangmahusaynaprogrammer

+0

リクエストは同じスレッドではなく、3つの異なるスレッドで処理されます。http-bio-8080-exec-23 、http-bio-8080-exec-24、http-bio-8080-exec-28のように問題はありません。 – codependent

答えて

0

アプリケーションは、異なるスレッドと予想、処理要求として働いているので、並列処理が適用されます。

Thread : http-bio-8080-exec-23 Start : Thu Jun 02 17:49:51 CST 2016 End : Thu Jun 02 17:50:01 CST 2016 TimeLapsed : 10001 
Thread : http-bio-8080-exec-24 Start : Thu Jun 02 17:50:03 CST 2016 End : Thu Jun 02 17:50:13 CST 2016 TimeLapsed : 10000 
Thread : http-bio-8080-exec-28 Start : Thu Jun 02 17:50:13 CST 2016 End : Thu Jun 02 17:50:23 CST 2016 TimeLapsed : 10000 

なぜ要求がシリアルに実行されますか?あなたが見ているものはブラウザーに関連しています。つまり、同じブラウザーから要求を出していて、前の要求が完了するまで次の要求を実行しません。

browser 1: Thread : http-bio-8080-exec-31 Start : Fri Jun 03 08:38:13 CST 2016 End : Fri Jun 03 08:38:23 CST 2016 TimeLapsed : 10000 – rbmeo 6 hours ago   
browser 2: Thread : http-bio-8080-exec-29 Start : Fri Jun 03 08:38:11 CST 2016 End : Fri Jun 03 08:38:21 CST 2016 TimeLapsed : 10000 

のでfrontcontrollerプロセスはセッションごとに1を要求:あなたは、あなたが期待するものを見る二つの異なるブラウザでしようとする理由ですか? 同じブラウザに同じcookieidがあるので、同じセッション権が必要ですか?

いいえ、セッションごとに1つのリクエストではありません。 2回のAJAX呼び出しを行うと、それらが同じHttpSessionに属していて、並行して処理されていることがわかります。

関連する問題