Home  >  Q&A  >  body text

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

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

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

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

迷茫迷茫2749 days ago431

reply all(6)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 14:53:57

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

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 14:53:57

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

    reply
    0
  • 阿神

    阿神2017-04-10 14:53:57

    SignalR

    内容的字数过少, 请详细描述

    reply
    0
  • 黄舟

    黄舟2017-04-10 14:53:57

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

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 14:53:57

    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任意一个就行)

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:53:57

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

    reply
    0
  • Cancelreply