ホームページ  >  記事  >  バックエンド開発  >  拉勾上和微博这个技术是怎么实现的?

拉勾上和微博这个技术是怎么实现的?

WBOY
WBOYオリジナル
2016-06-06 20:32:201168ブラウズ

拉勾上和微博这个技术是怎么实现的?

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

回复内容:

拉勾上和微博这个技术是怎么实现的?

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

  1. Websocket
  2. Ajax轮询
  3. 长连接(Comet)

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

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

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

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

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

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

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

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

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

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

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

会不会用的是html5的SEE呢

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

大家想多了,就是轮询!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。