2

我正在开发一个聊天网络应用程序,所以如果在后台发生事件,我当然需要使用某种“推送”方法来发布一些东西。我决定暂时坚持使用长轮询,因为我对 Web 开发有点陌生,而且我没有太多时间学习将新信息推送到视图的好方法,而且似乎工作得很好。所以,现在我的问题:在服务器端我有一个方法,我有一个永无止境的循环,没有睡眠,所以如果发生任何事情(例如用户收到一条新消息)我可以将它发布到实时查看。有几个用户,它工作得很好,但是如果很多用户开始使用它,服务器会发生什么?它会崩溃吗?

代码示例:

def update() {
 boolean stayInWhile = true
 while(stayInWhile) {
  //check for updates
  if(/*update available*/) {
   stayInWhile = false
   //set up a response
  }
 }
 //return response
}
4

1 回答 1

1

正如您所怀疑的那样,如果很多人同时使用您的应用程序,我认为您使用的方法最终可能会使请求线程容器挨饿。

更好的方法可能是在客户端浏览器上运行一个 javascript 计时器,update()每隔几秒向您的方法提交一个 ajax 请求。这样,您的请求线程将在每次“检查”后返回到池中。看看javascriptsetTimeout方法。还有几个关于使用 setTimeout 更新进度条 stackoverflow 问题。

或者,您可以使用出色的Grails Atmosphere 插件设置 ajax 'push'(从服务器 -> 客户端)。

于 2013-10-21T07:13:05.637 回答