我正在开发一个聊天网络应用程序,所以我当然需要使用某种“推送”方法发布事件,如果事件发生在后台。我决定暂时坚持使用长轮询,因为我对Web开发有点新意,而且我没有太多时间学习将新信息推向视图的好方法,而且似乎工作得很好。那么,现在我的问题:在服务器端我有一个方法,我有一个永无止境的循环,没有睡眠,所以如果有任何事情(例如用户得到一个新的消息)我可以发布到实时查看。有一些用户,它工作正常,但如果很多用户开始使用它,服务器会发生什么?它会崩溃吗?
代码示例:
def update() {
boolean stayInWhile = true
while(stayInWhile) {
//check for updates
if(/*update available*/) {
stayInWhile = false
//set up a response
}
}
//return response
}
答案 0 :(得分:1)
正如您所怀疑的那样,如果很多人同时使用您的应用程序,我认为您正在使用的方法最终会使请求线程的容器挨饿。
更好的方法是在客户端浏览器上运行javascript计时器,每隔几秒钟向您的update()
方法提交一个ajax请求。这样,您的请求线程将在每次“检查”后返回到池中。看看javascript setTimeout
method。还有一个couple of stackoverflow有关使用setTimeout更新进度条的问题。
或者,您可以使用优秀的Grails Atmosphere plugin设置ajax'push'(来自服务器 - >客户端)。