2012-04-29 3 views
0

서버가 여러 클라이언트에 (초당) 값을 전송해야하는 시스템을 개발 중입니다. 내 생각은이 작업을 수행 할 각 클라이언트에 대해 단일 스레드를 구현하는 것이 었습니다.GWT (서버 측) 멀티 스레딩 가능

thread.interrupt(); 
thread = null; 

하지만 난 그냥 멈춤/재생을 할 수 없습니다 :

Runnable tu = new TimeUpdater(market_id); 
Thread thread = ThreadManager.createBackgroundThread(tu); 
thread.start(); 

public class TimeUpdater implements Runnable{ 
boolean close = false; 
.. 
    public void run() { 
     while(!close){ 

     try { 
     //do something  
     Thread.sleep(1000); 
     }catch (InterruptedException e) { 
     } 

     } 
    } 
} 

난 그냥 사용하는 스레드를 일시 중지하려면 : 나는 다음과 같은 방식으로 스레드를 구현 스레드의 작동합니다. 누구나 서버에서 GWT를 사용하여 멀티 스레딩을 사용하는 것이 좋습니다.

실수로 수정 ​​된 원본 게시물. - Martin

+1

GWT의 서버 측이 모순 (일종)이다. gwt는 클라이언트에서 실행되는 javascript를 컴파일합니다. –

+0

@ antony.trupe 잘못하지 않거나 모순, gwt는 원격 작업 등을 수행하는 서버 측 구성 요소를 포함합니다. –

답변

0

먼저, 백그라운드 스레드가 이러한 프로세스를 백엔드에서 실행해야합니다. 이렇게하려면 이미 실행중인 작업이 될 백엔드로 작업을 보내야하므로 스레드를 추가하는 것이 앱에 대기 시간을 더 걸리게됩니다. 메시지를 보내려면 실제로 스레드가 필요하지 않습니다. 백엔드 요청은 10 분 동안 지속됩니다. 또한 스레드는 자체 요청으로 실행됩니다. 정적 램에 액세스 할 수있는 스레드 목록을 저장할 수는 있지만 더 나은 솔루션은 인스턴스를 온라인 상태로 유지하고 절전 모드로 유지하는 대신 메시지가 들어올 때 배포하는 것입니다. 클라이언트가 매초마다 서버에 메시지를 보내는 경우 해당 rpc는 다른 사용자에게 통보해야하는 키를 쿼리하고 즉시 메시지를 보낼 수 있습니다. 비동기 데이터 저장소 프로세스를 사용하는 경우 매우 빠릅니다. 또한 요청 시간을 줄이려면 rpc가 메시지 보내기를 시작한 다음 서블릿이 응답을 반환하도록하고 응답이 이미 회선을 종료 한 후에 비동기 요청을 마무리 할 수 ​​있습니다.

ThreadLocal 맵과 정리 필터를 사용하여 이와 같은 후 처리를 수행합니다. 서블릿은 작업을 실행 파일 목록에 게시하고 정리 필터는 작업을 실행합니다. 비동기 요청을 즉시 시작하면 정리 필터가 가져 오는 시간까지 비동기 요청을 수행하는 경우가 많습니다.

https://developers.google.com/appengine/docs/java/datastore/async

+0

나는 java.lang.Thread의 사용자 지정 슈퍼 소스 하위 클래스를 사용하여 쉽게 멀티 스레딩을 할 수있는 라이브러리 작업을하고 있습니다. Appengine 및 Java 환경에서는 정상 스레드처럼 작동하고 gwt 클라이언트에서는 정상 스레드와 거의 유사합니다. 그것이 공개 될 때, 나는 당신에게 소스에 대한 링크를 게시 할 것입니다. – Ajax

1

유감스럽게 생각하지만 google-app-engine은 멀티 스레딩을 허용하지 않습니다. 예를 들어 here을 참조하십시오.