请教要如何实现类似新浪微博的网页私信推送功能

目前正在做一个社交网站 (Thinkphp+mysql), 我想当某些用户触发了一些条件的时候通知另外一些在线的用户,比如说:发私信、给对方送了一件小礼物

目前我想到唯一的方法是 :
把要发送的消息放进Redis,然后在Action这个基类做一个redis的查询,这样用户每进行一次操作都会去查这个Redis是否有内容。但是这样不太科学,属于是被动式查询。

请教一下各位都有什么好的方法,万分谢谢!

阅读 18.5k
6 个回答

https://github.com/walkor/web-msg-sender
这个绝对是你想要的,websocket+workerman实现的

DEMO
后台发送消息的页面 http://workerman.net:3333/
用户接收消息的页面 http://workerman.net/web-msg-sender.html

原理:用户打开页面后浏览器会自动向后端服务器发送一个websocket(浏览器支持HTML5或者Flash就可以)连接,后端hold住这些连接,当想推送消息给浏览器时,向这些websocket连接写数据即可。

优点

  1. 非轮询,性能很高,普通的服务器即可维持上万的连接
  2. 实时性好
  3. 兼容各种浏览器包括ie6(客户端支持flash或者html5任意一个就行)

1.轮询或者长轮询(普遍采用这种方式。这个也就是你说的方式,利用ajax不停的去请求服务器,看有没有新消息)
2.webSocket(需要浏览器支持html5。这个可以实现服务器主动推送。)
3.flash(一般网页游戏中都是利用这种方式)

1 轮询
用ajax隔一秒钟向后台询问
2 长连接
发送ajax请求到后台,但是后台阻塞不返回,知道快要超时再返回,途中遇到新消息时间可立即返回
3 websocket
客户端和服务器端建立连接通道,服务器可以主动发消息给浏览器,HTML5支持的特性

我觉得只要用户量达到一定规模,小公司做产品的话这个就应该走三方推送(极光推送,百度云推送等)去做,即使付费
自己实现的话设备和运维成本高

新手上路,请多包涵

自己实现太麻烦,建议你使用GoEasy.免费的网页推送服务。
自己不用写代码,支持所有语言,几分钟就可以实现一个推送功能,非常简单,速度快,还可靠。
http://goeasy.io

推荐问题
宣传栏