php - 拉勾上和微博这个技术是怎么实现的?
PHPz
PHPz 2017-04-10 15:45:02
[PHP讨论组]

在我没有任何刷新的情况这个消息框是自动弹出的,像微薄的私信也是?这个不会是用AJAX一直请求的吧?好奇是怎么实现的,等大神回答

PHPz
PHPz

学习是最好的投资!

全部回复(11)
大家讲道理
  1. Websocket
  2. Ajax轮询
  3. 长连接(Comet)
高洛峰

楼上的别带坏小朋友了,轮询和websocket太耗服务器了,还是学sf用setinterval请求服务器吧

高洛峰

前端JS可以在捕捉到特定事件后向服务器发送请求,比如当窗口获取焦点时(window.onfocus),查询一次用户消息:

window.onblur  = function(){document.title = '失去焦点';};
window.onfocus = function(){document.title = '获得焦点';};

如果只是普通的消息推送(不追求很高的实时性),可以考虑隔10分钟用AJAX轮询一次.

PHP中文网

我刚才看了一下segmentfault上消息通知的实现。他是有两种方式同时实现的:
1.给标签页绑定一个当前页面是否可见事件,当用户把页面切到segmentfault.com域名下的页面时,触发页面可见事件,发送请求。

javascriptdocument.addEventListener(visibilityChange, function() {
    if(document[state]=="hidden"){
        // 标签页不可见
    }else{
        // 标签页可见
        // 向服务器请求用户的消息
    }
}, false);

2.打开控制台的network,可以发现,segmentfault应该也是在使用setInterval()在向服务器发送请求,时间间隔差不多是35秒左右。或者使用其他的轮询技术向服务器发送请求

PHP中文网

可以实现的方法太多了,比如websocket,或者ajax轮询等等

伊谢尔伦

直接使用ajax就可以了, 比如,使用jQuery, 后台有个url直接轮询即可

PHP中文网

可以通过websocket实现,之前测试过flask-websocket,可以用户登录时服务器建立一个room,然后用户加入这个room,当服务端收到相关消息时就判断针对该用户的room是否存在,存在则给这个room发消息。当用户关闭页面时,这个连接会断开,则删除对应room。

迷茫

应该都是消息推送,搜索关键字:cometd

迷茫

会不会用的是html5的SEE呢

阿神

segmentfault社区也是轮询,你把开发者工具打开,看network那一项,等一会就会看到请求的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号