0

我正在开发一个系统,服务器需要(每秒)向多个客户端发送值。我的想法是为每个客户端实现一个线程来执行此操作。我以以下方式实现了线程:

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) {
       }

      }
   }
}

要暂停我刚刚使用的线程:

thread.interrupt();
thread = null;

但我就是不能让线程的暂停/恢复工作。有没有人有更好的想法在服务器上使用多线程和 GWT?

错误地编辑了原帖。- 马丁

4

2 回答 2

1

很抱歉,但我相信 google-app-engine 不允许多线程。例如,请参见此处

于 2012-04-29T23:07:40.827 回答
0

首先,您的后台线程要求这些进程在后端运行。为了做到这一点,您必须将任务发送到后端,您将在后端运行任务,因此添加线程只会增加应用程序的延迟。您实际上不需要线程来发送消息;后端请求持续 10 分钟。此外,您的线程将按照自己的请求运行;您可能能够在静态 ram 中存储线程列表以便能够访问它们,但更好的解决方案是在消息进入时分发消息,而不是让实例保持在线和休眠状态。如果您的客户端每秒都向服务器发送消息,则该 rpc 可以通过键查询需要通知哪些其他用户,并立即发送消息。如果您使用异步数据存储进程,它会非常快。此外,如果您想缩短请求时间,

我使用 ThreadLocal 映射和清理过滤器进行这样的后处理。Servlet 将作业发布到可运行的列表中,并且清理过滤器运行这些作业。只要您立即启动异步请求,它们通常会在清理过滤器到达它们时完成。

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

于 2012-04-30T17:12:59.753 回答