2

我以前有使用 PHP 和 jQuery 进行长轮询以检查新聊天消息的经验。

想法是有一个 while 循环来检查是否有新消息,如果有,则返回新消息,如果没有,则休眠 5 秒并再次检查。

我想使用 java struts2 框架做同样的事情。我创建了一个具有 while 循环的操作类,执行相同操作,并使用 Thread.sleep() 进行等待。

但是,我遇到了一些非常高的 CPU 使用率。我做对了吗?很抱歉,我现在没有任何示例代码,因为我使用一种使用客户端轮询的简单方法重新编写了它。

帮助表示赞赏。

4

2 回答 2

1

为什么不使用 BlockingQueue?我不明白为什么这与 jQuery 和长轮询有关。这是一个服务器内部设计问题。

于 2013-04-25T09:18:09.673 回答
0

如果(尽管标题说 jQuery),你想用 Java 做这个(“我想用 java struts2 框架做同样的事情。”),那么while 循环不是一个好的解决方案

相反,您应该使用java.util.Timer ( / TimerTask )。

请注意,在 Struts2 中,每个请求都会实例化一个 Action,因此如果您在 Action 中创建一个 Timer,并且您有 100 个并发用户,那么您就有 100 个计时器在运行。最好从 EJB 使用它

也看看这个 SO 答案:

1) Timer & TimerTask 与 Java 中的 Thread + sleep

2)如何在java中设置定时器

并在 Javadoc: Java EE 5 教程 - 使用计时器服务

我的2美分...

于 2012-12-20T13:37:10.943 回答