我正在开发一个聊天网络应用程序,所以如果在后台发生事件,我当然需要使用某种“推送”方法来发布一些东西。我决定暂时坚持使用长轮询,因为我对 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/