服务器正在运行nodeJs,我决定使用Server Sent Events来执行推送通知.这要求我在AndroID上使用firefox,因为原生AndroID浏览器不支持SSE.
我的实现一切正常:节点服务器正在发布事件,我的客户端HTML5 / JavaScript正在桌面Chrome / firefox / safari,我的iPod iOS6和我的AndroID 2.2手机上正常运行.
但是,我需要处理4种常见情况:
>设备失去了Wi-Fi信号
> nodeJs服务器崩溃(希望这不常见!)
>在浏览其他应用程序等时将浏览器置于iPod / AndroID的后台.
>在浏览器运行时锁定iPod / AndroID上的屏幕
Chrome / Safari在桌面和iPod上表现完美,如下所示:如果服务器崩溃,网站会在服务器再次启动时自动重新连接并获取推送的消息,如果浏览器应用程序因任何原因进入后台,它仍然在后台获取这些消息,或者至少在它返回前台时自动重新连接.
然而,桌面和AndroID上的firefox都非常渴望永久关闭该EventSource连接.一旦浏览器失去与服务器的连接,无论是从服务器崩溃,将firefox应用程序放入后台还是锁定屏幕,EventSource连接都会被终止,并且不会尝试重新连接.当然,您可以在回到页面时重新加载页面,但这很烦人,特别是在您需要锁定屏幕的情况下,因为您需要将手机放入口袋(此应用程序需要用于一些徒步旅行的情况).
除了必须一直在AndroID firefox中重新加载页面外,任何人都可以推荐任何解决方案吗?下面是我的虚拟实现,只需每5秒发送一次随机数.
服务器在/ main / src
src : function(req,res) {req.socket.setTimeout(Infinity); // send headers for event-stream connectionres.writehead(200,{ 'Content-Type': 'text/event-stream','Cache-Control': 'no-cache','Connection': 'keep-alive'});res.write('\n');var messageCount = 0;var process; function printEvent() { messageCount++; rand = Math.floor((Math.random()*10000)+1); res.write('ID: ' + messageCount + '\n'); res.write("data: " + rand + '\n\n'); process = setTimeout(printEvent,5000);}printEvent(); res.socket.on('close',function () { res.end(); clearTimeout(process);});}
客户
var source = new EventSource('/main/src');source.onopen = function(e){ $("#test").HTML("Connected to server. Waiting for data..."); } source.onmessage = function(e){ $("#test").HTML("MSG: " + e.data);}source.onerror = function(e){ var txt; switch(e.target.readyState){ case EventSource.CONNECTING: txt = 'Reconnecting...'; break; case EventSource.CLOSED: txt = 'Connection Failed. Will not retry.'; break; } $("#test").HTML("Error: " + txt);}
谢谢!!
解决方法 我只知道一个已在许多库中使用的解决方案:“心跳”消息 – 在客户端,您可以检查,如果在10秒内没有从服务器收到“随机数”(5000秒有些滞后) – 连接似乎被破坏,您应该重新连接
(使用本机EventSource,您可以使用“close”方法,而不是创建新的EventSource或者您可以尝试 https://github.com/Yaffle/EventSource) 总结
以上是内存溢出为你收集整理的EventSource不会在Android Firefox上自动重新连接全部内容,希望文章能够帮你解决EventSource不会在Android Firefox上自动重新连接所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)