在我没有任何刷新的情况这个消息框是自动弹出的,像微薄的私信也是?这个不会是用AJAX一直请求的吧?好奇是怎么实现的,等大神回答
前端JS可以在捕捉到特定事件后向服务器发送请求,比如当窗口获取焦点时(window.onfocus),查询一次用户消息:
window.onblur = function(){document.title = '失去焦点';};
window.onfocus = function(){document.title = '获得焦点';};
如果只是普通的消息推送(不追求很高的实时性),可以考虑隔10分钟用AJAX轮询一次.
我刚才看了一下segmentfault上消息通知的实现。他是有两种方式同时实现的:
1.给标签页绑定一个当前页面是否可见事件,当用户把页面切到segmentfault.com域名下的页面时,触发页面可见事件,发送请求。
javascript
document.addEventListener(visibilityChange, function() { if(document[state]=="hidden"){ // 标签页不可见 }else{ // 标签页可见 // 向服务器请求用户的消息 } }, false);
2.打开控制台的network,可以发现,segmentfault应该也是在使用setInterval()在向服务器发送请求,时间间隔差不多是35秒左右。或者使用其他的轮询技术向服务器发送请求
可以通过websocket实现,之前测试过flask-websocket,可以用户登录时服务器建立一个room,然后用户加入这个room,当服务端收到相关消息时就判断针对该用户的room是否存在,存在则给这个room发消息。当用户关闭页面时,这个连接会断开,则删除对应room。
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答3.1k 阅读
1 回答1.9k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读