扫码关注官方订阅号
类似微博我不刷新网页,然后通知有私信、评论等等的,这个功能是咋实现的呢? 之前听说可以用长轮询,还有有没有什么更好的办法?谢谢大家。
走同样的路,发现不同的人生
可以用websocket ,这里找到了一个例子,web消息推送https://github.com/walkor/web-msg-sender
ajax,长连接。楼下继续补充
一般有2种方式: 第一种就是客户端(浏览器)通过轮询的方式每隔一段时间请求一次服务器(AJAX请求),属于pull方式;还有一种是使用WebSocket和服务器保持长链接,服务器在有更新的时候推送消息给客户端,属于push的方式,不过这种方式需要较新的浏览器的支持。 需要根据项目的实际情况,来选择合适的实现方式。
linux上开一个守护进程,在发送消息成功时候把消息id写入redis队列,守护进程专门监控redis队列,只要一有消息即可弹出提醒,做到实时提醒
WebSocket 楼下请补充。
1、h5 websocket 2、ajax,commet 长连接。 comet,基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构。同事说新浪微博就是用的这种技术; 有个简单的介绍http://www.cleey.com/blog/single/id/707.htmlhttp://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中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
可以用websocket ,这里找到了一个例子,web消息推送
https://github.com/walkor/web-msg-sender
ajax,长连接。楼下继续补充
一般有2种方式:
第一种就是客户端(浏览器)通过轮询的方式每隔一段时间请求一次服务器(AJAX请求),属于pull方式;还有一种是使用WebSocket和服务器保持长链接,服务器在有更新的时候推送消息给客户端,属于push的方式,不过这种方式需要较新的浏览器的支持。
需要根据项目的实际情况,来选择合适的实现方式。
linux上开一个守护进程,在发送消息成功时候把消息id写入redis队列,守护进程专门监控redis队列,只要一有消息即可弹出提醒,做到实时提醒
WebSocket
楼下请补充。
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也行