几分钟后,圣杯上的气氛挂起

Posted

技术标签:

【中文标题】几分钟后,圣杯上的气氛挂起【英文标题】:Atmosphere on grails hang after a few minutes 【发布时间】:2014-07-09 09:50:25 【问题描述】:

我正在使用 grails-events-push 插件,一切正常,但是当系统空闲一段时间(大约 3 分钟)时,连接丢失,无法重新连接服务器。 当我刷新页面时,一切都恢复正常了。

这是 chrome 上的错误: WebSocket 连接到 'ws://192.168.1.109:8080/EasyRestaurant//g-eventsbus/eventsbus?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.1.5-jquery&X-Atmosphere-Transport=websocket&X-Atmosphere -TrackMessageSize=true&X-Cache-Date=0&Content-Type=application/json&X-atmo-protocol=true' 失败:收到包含保留状态代码的损坏关闭帧。

在此错误之后,如果我尝试发送事件,则会出现另一个事件: 没有可用的暂停连接。确保在调用此方法之前调用了大气.subscribe 并调用了 request.onOpen。​​

我在 tomcat:7.0.52.1(events-push:1.0.0.BUILD-SNAPSHOT 和 org.grails.plugins:events:1.0.0.BUILD-SNAPSHOT)中使用了大气 javascript-2.1.5 我不知道哪个版本的气氛使用grails-events-plugin。

有人知道问题出在哪里吗?是javascript中的大气客户端还是grails中的grails-events-push插件?是tomcat吗?

谢谢!

【问题讨论】:

【参考方案1】:

我在atmosphere plugin and sample app 中使用了下面的两个拦截器,并且没有遇到任何断开连接或超时的问题。

org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor
org.atmosphere.interceptor.HeartbeatInterceptor

我快速浏览了 Stephane 的插件代码,但没有发现配置这些的简单方法。

您应该能够通过将下面的编译行添加到应用的 BuildConfig.groovy 依赖项部分来尝试最新的氛围版本。我先试试看。

dependencies 
    // other dependencies
    compile 'org.atmosphere:atmosphere-runtime:2.1.3'

您可以使用我的插件,但您必须添加自己的事件处理代码。在我的私有应用程序中,我使用 Grails 服务来处理发送事件和通知,实现起来并不难。

【讨论】:

我想使用 HeartbeatInterceptor 但我不知道如何配置。我将按照您在配置中所做的相同方式进行尝试。如果它有效,我会接受你的回答!感谢您的回复! @mpccolorado 我的插件配置工作方式与 events-push 插件完全不同,所以我认为这不会工作。你试过最新的气氛版本吗? 我会按照你的建议试试最新版的气氛!或者可能是客户端的大气运行时:2.1.4 和大气-javascript-2.1.4。因为我在客户端使用了 grails-events-push 和大气-javascript-2.1.5 附带的原始版本的气氛(也许这就是问题所在)。谢谢! 我使用 2.1.4 版本的方式与您建议的方式相同,它就像一个魅力! (我认为在服务器中使用旧版本的气氛并在客户端使用新版本是一个问题)。谢谢!

以上是关于几分钟后,圣杯上的气氛挂起的主要内容,如果未能解决你的问题,请参考以下文章

.NET IRC TCPClient 读取挂起 30-40 分钟后

Docker + pubsub + subprocess 挂起且没有错误

sun.security.provider.SHA2 使用 100% cpu 并在一段时间后挂起 5 分钟

文件大小适中的构建挂起

.NET Core Windows 服务中的并行任务在几秒钟后挂起

Java 定时器和 scheduleAtFixedRate + 系统挂起