欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-14 18:57:34
...
目前正在做一个社交网站 (Thinkphp+mysql), 我想当某些用户触发了一些条件的时候通知另外一些在线的用户,比如说:发私信、给对方送了一件小礼物

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

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

回复内容:

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

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

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

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支持的特性

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

SignalR

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

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

相关标签: php