类似微博我不刷新网页,然后通知有私信、评论等等的,这个功能是咋实现的呢?

WBOY
풀어 주다: 2016-06-06 20:32:13
원래의
1375명이 탐색했습니다.

类似微博我不刷新网页,然后通知有私信、评论等等的,这个功能是咋实现的呢?
之前听说可以用长轮询,还有有没有什么更好的办法?谢谢大家。

回复内容:

类似微博我不刷新网页,然后通知有私信、评论等等的,这个功能是咋实现的呢?
之前听说可以用长轮询,还有有没有什么更好的办法?谢谢大家。

可以用websocket ,这里找到了一个例子,web消息推送
https://github.com/walkor/web-msg-sender

ajax,长连接。楼下继续补充

一般有2种方式:
第一种就是客户端(浏览器)通过轮询的方式每隔一段时间请求一次服务器(AJAX请求),属于pull方式;还有一种是使用WebSocket和服务器保持长链接,服务器在有更新的时候推送消息给客户端,属于push的方式,不过这种方式需要较新的浏览器的支持。
需要根据项目的实际情况,来选择合适的实现方式。

linux上开一个守护进程,在发送消息成功时候把消息id写入redis队列,守护进程专门监控redis队列,只要一有消息即可弹出提醒,做到实时提醒

WebSocket
楼下请补充。

可以参考一下这个:
http://segmentfault.com/q/1010000002793033/a-1020000002793276

在tab被激活的时候向后端发请求, 有更新就显示相应的提示.
然后每隔30秒发一次请求检测状态.

1、h5 websocket
2、ajax,commet 长连接。
comet,基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构。同事说新浪微博就是用的这种技术;
有个简单的介绍
http://www.cleey.com/blog/single/id/707.html
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

websocket有点浪费,可以用SSE

AJAX定时轮询实现起来应该是最简单的,服务器端不用做大的修改,虽然很多人认为这样做效率很低,但个人认为基于HTTP无状态实现高并发还是可以的,服务器可以根据系统负载合理地通知浏览器控制轮询间隔的时间.

推送功能每5分钟秒轮询一次也是合理的.聊天功能每5秒轮询一次也不算太久.浏览器端可以用JS编程,如果连续N次每隔5秒轮询数据都是空的话,可以改为每隔1分钟轮询一次.如果超过指定时间(页面长时间失去焦点),页面没有任何操作,则可以考虑关闭轮询.

新浪微博的聊天功能应该用的是Comet长轮询,浏览器发一个请求到服务器,服务器拿到请求后进入轮询(即使是事件驱动,也是有开销的),有消息才返回给浏览器,新浪微博的聊天Comet服务器貌似用的是Jetty(Java)实现的:
curl -I http://im.weibo.com/
Server: Jetty(9.2.9.v20150224)
感觉Comet是把浏览器轮询,搬到了服务器端去轮询.

http://www.w3school.com.cn/html5/html_5_serversentevents.asp

楼上的说得很全面了,刚才突发奇想,把私信通知设置成iframe,设置meta refresh也行

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!