grails - 使用 Grails 进行长轮询

标签 grails groovy long-polling

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

代码示例:

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

最佳答案

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

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

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

关于grails - 使用 Grails 进行长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486883/

相关文章:

grails - Grails安全插件

php - 如何使用 php - mysql 进行 ajax 长轮询

php - Codeigniter LongPolling "while(true)"不起作用?

c# - 使用 iOS 客户端应用程序和 C# 服务器进行长轮询

grails - 如何检测 grails 2.4.4 上是否安装了插件

好极了。是否可以将方法保存到 var 中?

grails - 在哪里可以找到 grails 的构建生命周期事件列表?

grails - 如何在基于Maven的Grails项目中安装JAWR插件

grails - grails在运行时不会将lib文件夹中的jar文件包含到插件中

java - Jenkins - 在不同的机器上使用本地环境变量执行脚本