【发布时间】:2017-09-23 12:28:52
【问题描述】:
我们正在使用我们自己的通知系统构建一个聊天室,不依赖于 GCM,而是使用 service worker + SSE。 在桌面上很好,但在移动 android 应用程序上(使用 cordova-crosswalk , chromium 53 )。 长时间运行的通知连接在 20-30 分钟后卡住,处于前台活动状态。 它不会因错误而死,只是不接收数据。完全没有错误,这很奇怪。无法重新连接,因为我们根本不知道连接是否已断开。
最干净的方法是什么?每 5 分钟重新启动连接是一种想法,但它并不干净。 代码
runEvtSource(url, fn) {
if (this.get('session.content.isAuthenticated') === true) {
var evtSource = new EventSource(url, {
withCredentials: true
});
}}
主动重新连接代码
var evtSource = this.runEvtSource(url, fn)
var evtSourceErrorHandler = (event) => {
var txt;
switch (event.target.readyState) {
case EventSource.CONNECTING:
txt = 'Reconnecting...';
evtSource.onerror = evtSourceErrorHandler;
break;
case EventSource.CLOSED:
txt = 'Reinitializing...';
evtSource = this.runEvtSource(url, fn)
evtSource.onerror = evtSourceErrorHandler;
break;
}
console.log(txt);
evtSource.onerror = evtSourceErrorHandler
【问题讨论】:
-
您是否尝试过定期(小于您似乎遇到的超时)发送数据以保持连接处于活动状态?
-
不,我没试过,这意味着发送虚假数据?
-
不是真正的“假”数据,而是仅用于保持连接活动的数据(通常称为 ping/pong)。
-
当我检查时,连接仍然存在,但数据只是没有进出。
标签: javascript chat real-time long-polling server-sent-events