作者darkk6 (Mr. Pan)
看板Ajax
标题[问题] 关於 Server Send Event 的疑问
时间Tue Apr 11 10:50:31 2017
大家好,最近在制作一个功能的时候需要用到 Server Send Event 功能
基本上目前在 CROS 和 Client 设定都差不多完成,但遇到一个小问题:
在 Firefox 上面,当 Client 网路断掉的时候,EventSource 物件
会侦测到无法继续与 Server 沟通,而触发 onerror
但是 Chrome 上面则不会,会持续等到网路再连上线後,一次把这段期间
所有 Server 的讯息给抓下来
未来目标会放在 nw.js 或者 Electron 上面,但这些都是 Chromium
行为模式和 Chrome 相同。
但我比较 Prefer Firefox 的方式,希望能够侦测到无法继续与 Server 连线
触发 onerror 好让我处理。
不知道有没有甚麽设定可以调整呢? 感恩~
另外想请问 data 的 "retry" 是什麽意思,我看说明不是很确定意思...
谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.137.23
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1491879034.A.2B4.html
1F:→ mmis1000: 指定要重试几次/间隔多久後才触发on error 04/11 19:52
2F:→ mmis1000: 但 firefox 貌似不是很遵守这个行为 04/11 19:52
https://www.w3.org/TR/2011/WD-eventsource-20110208/
我再查了一下 w3c 的规格(上面网址),retry 是指:
当连线中断後(包含完成传输或预期外的断线),多少 ms 後会自动重新连线
若使用 .close() 关闭,则不会再尝试重新连线
但有注意到这两段:
https://gist.github.com/anonymous/d6edac5b9badd33b471b6611bf4dcfdd
这样综合起来,基本上就是只要结束连线(正常或意外),浏览器必须要
在指定时间後重新连线(除非有呼叫 .close() )。
但是要是中间发生错误或问题,那麽必须要触发 error 事件
这样看起来似乎 Firefox 实作的比较符合规范,但 Chrome 在网路
断线的时候却没有触发 error ?
刚刚再测试,发现只要断的时间够长 Chrome 在网路重新回来後就会触发 error
并且自动重新开始连线
而 Firefox 则是网路一断线,马上就会跳 error,但过了一两次重连没连上
就不会再继续连线(这似乎不符合规范)
只要自己会重新连线基本上就没问题了XD
※ 编辑: darkk6 (223.138.231.175), 04/12/2017 10:58:17