2014-11-02 2 views
0

이것은 내 Servlet에있는 것입니다. 내가 여기서 뭐하는 거지브라우저에 정기적으로 메시지를 표시합니다.

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    System.out.println("Initializing..."); 

    ExecutorService executorService = Executors.newFixedThreadPool(1); 

    executorService.execute(new Runnable() { 
     public void run() { 
      System.out.println("Inside Thread!!!"); 
      for(int i=1; i<5; i++){ 
       System.out.println("Date: " + new Date()); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    });  
    executorService.shutdown(); 
    // Some more piece of code is there 
} 

: 나는 날짜가 콘솔 5 sec 후 인쇄됩니다 별도의 스레드를 생성 한

. 내가 원하는 무엇

: A의 인쇄 할

Initializing... Inside Thread!!! Date : Sat Nov 01 15:57:57 GMT 2014 Date : Sat Nov 01 15:58:02 GMT 2014 Date : Sat Nov 01 15:58:07 GMT 2014 Date : Sat Nov 01 15:58:12 GMT 2014 

내가 메시지의 동일한 세트를 원하는 :이 코드를 실행하면

, 나는 콘솔에 인쇄이 출력을 얻을 jsp 페이지에서 날짜가 5 sec 간격으로 인쇄되도록합니다 (코드 위에 Syetem.out.println() 메서드가 실행될 때마다 브라우저에 여러 응답을 보냄). 서버에서 메시지를 밀어

이유 : 위의 예에서

, 나는 루프에 간단한 메시지를 인쇄하고 있습니다. 그러나 실제 시나리오에는 계산이 있기 때문에 메시지가 다른 시간대 (즉, 5 초마다가 아니라 일부 메시지는 빠른 시간 내에 사용 가능하고 다른 메시지는 더 많은 시간이 소요될 수 있음)에서 사용할 수 있습니다. 따라서 서버에서 푸시하면 사용 가능한 메시지가있을 때마다 푸시 할 수 있습니다.

내가 (위의 코드에 ExecutorService에서 즉) 별도의 스레드에서 브라우저에 복수 응답을 전송하는 방법을 잘 모르겠습니다 : 이해하기

수 없습니다. 나는 setInterval 메서드를 javascript에 제시하고 있었지만이 코드를 어떻게 사용하는지 고소하지 않았습니다.

jQuery 또는 javascript을 무료로 사용할 수 있습니다. 제발 조언.

답변

1

서버에서 푸시하는 대신 클라이언트가 5 초마다 AJAX 요청을 작성하게하고 해당 끝점에서 인쇄 할 스 니펫을 반환해야합니다.

+0

위의 예에서 간단한 메시지를 루프로 인쇄합니다. 그러나 실제 시나리오에는 계산이 있기 때문에 메시지가 다른 시간대 (즉, 5 초마다가 아니라 일부 메시지는 빠른 시간 내에 사용 가능하고 다른 메시지는 더 많은 시간이 소요될 수 있음)에서 사용할 수 있습니다. 따라서 서버에서 푸시하면 사용 가능한 메시지가있을 때마다 푸시 할 수 있습니다. 제발 제안 해주세요. – user182944

관련 문제