PHP使用WebSwoole来实现消息推送

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wanwan1985
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在一个博客系统中,经常会使用到消息推送系统来发送一些通知给登录用户。如博主需要发送某个消息给所有登录用户,或者某个用户对另一个用户的评论进行了回复等等。该文利用WebSwoole技术来实现点对点的消息推送提醒。
  关键词:PHP;WebSwoole;消息推送
  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)25-0091-02
  1 前言
  B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式。这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室、后台消息提醒、实时更新数据等功能,但通过polling、Long polling、长连接、Flash Socket以及HTML5中定义的WebSocket能完成该功能需要。
  1.1 Socket简介
  Socket又称“套接字”,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket的英文原义是“孔”或“插座”,作为UNIX的进程通信机制。Socket可以实现应用程序间网络通信。
  1.2 WebSocket简介与消息推送
  B/S架构的系统多使用HTTP协议,HTTP协议的特点:
  1)无状态协议;
  2) 用于通过 Internet 发送请求消息和响应消息;
  3) 使用端口接收和发送消息,默认为80端口。
  底层通信还是使用Socket完成。HTTP协议决定了服务器与客户端之间的连接方式,无法直接实现消息推送。
  WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。特点:1)事件驱动;2)异步;3)使用ws或者wss协议的客户端socket。
  能够实现真正意义上的推送功能。
  1.3 WebSocket客户端
  websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信。在websocket中有两个方法:
  1)send() 向远程服务器发送数据;2)close() 关闭该websocket链接。
  websocket同时还定义了几个监听函数:
  1)onopen 当网络连接建立时触发该事件;2)onerror 当网络发生错误时触发该事件;3)onclose 当websocket被关闭时触发该事件;4)onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。
  websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。
  2 需求分析
  以博客系统中评论被回复为例,当一条评论被其他某个用户(假设是用户B)回复,即发一条通知给被回复的评论所属人(假设是用户A),告诉A,他的评论被回复了。
  2.1 功能分析:
  1)我们不能保证用户B和用户A都处于连接状态,但是通常情况下,用户B至少是连接状态,用户A不一定跟server保持连接;
  2)任一用户都不止对应一个客户端。换言之,用户A和用户B都可能打开了多个tab页,对于一个tab页,就会有一个独立的fd标识,我们这里认为任一用户只有最新的fd有效,或者你可以认为用户所有的tab页的连接都有效;
  3)因为没有用户系统,我们以get传递的参数uid为标识,uid=100视为用户A,uid=101视为用户B;
  4)我们不准备做一个评论系统,我们模拟的tab页包将会包含一个输入内容的文本框、一个输入目标uid的input和一个发送的按钮以满足需求。
  2.2流程分析:
  1)户A($_GET[’uid’] = 100)在某个tab页的输入框输入“回复xxx的内容”字样后,点击发送。
  2)户B($_GET[’uid’] = 101)如果处于连接状态,则alert提醒用户B,他的评论被回复了。
  3关键代码实现
  将WebSwoole的创建和相关的回调封装到一个类中,服务器端代码逻辑如下:
  1)我们给CommentServer类增加了一个属性 $user2fd,这个是key => value结构,用于保存uid和fd的映射关系。
  2)onOpen回调做两件事,验证授权和添加新的映射关系。
  3)onMessage回调只接收含有event项的数组,event等同于CommentServer类的方法名,我们这里只有一个用于web通知的alertTip方法。
  此外,我们封装了该类的close方法和push方法,close方法用于server主动关闭连接,删除uid和fd的映射,push方法用于向指定的fd推送消息
  class CommentServer
  { private $_serv; //webswoole变量
  public $key = ’^abc
其他文献
人们的聪明智慧作为感知世界,改造世界的能力,历来被看作是诸生产要素中最重要、最活跃的因素.一个组织或地区的人才智力构成,形成了该组织和地区人力资源.在我国目前的生产
以工艺美术为根、传统文化为源、茶文化为媒的紫砂壶艺以其独有的良好理化性能、丰富柔和的质感.切茗、切壶、切情的铭文与妙趣横生的款识融中国传统文化于一体,以其独特的形
7月25日,江苏省陶瓷行业协会第二次会员代表大会召开。省民政厅李健、省经信委方超英等相关领导和上届省陶协会长陈金偕、会员企业代表共80余人出席了大会。江苏省省陶协常务
采用高铁高钾长石取代钾长石和硫铁矿渣,对玻璃着色方案进行了工艺改进,既满足了用户对外观等性能的要求.又减少了配合料碳酸钾的使用量,降低了原料成本和能源消耗,改善了生产作业
紫砂壶自问世以来,随着社会经济形式起伏跌宕,几起几落。由于它与人们生活相贴近,富有实际的使用功能,又有不断升华的艺术性。因而有着顽强的生命力。当今社会国泰民安、经济繁荣
摘要:教学诊改日益受到学术界和教育界的高度关注,在互联网 时代,可以结合各类数据分析让数据成为科学管理、提供服务的基础,以此科学完善教学诊改,进一步提升学校的整体实力。  关键词:教学诊改;大数据;互联网   中图分类号:G642 文献标识码:A 文章编号:1009-3044(2018)18-0083-01  1 背景  2015年教育部办公厅印发了《关于建立职业院校教学工作诊断与改进工作制度的通
赤橙黄绿,彩旗又迓八方客;南北东西,世界同尊一把壶。(蒋祖芳)陶都风,长空溢彩;艺术节,大地流金。(邓君曙)紫玉金砂招远客:高山流水谢知音。(赵琴芬)出新紫玉紫壶珍品:唱响陶都陶艺劲歌。(宗
玉雕技法是我国先民的伟大创造,最早可追溯到距今7000多年的河姆渡时代。商周时期玉雕的制作,以制作礼器为主。古人认为礼器与皇权、天命有关,它是山川之精,通过人工的雕琢具
中国是一个饮茶的国度,因为茗饮方法不同,饮用器具类型也非常丰富,并且一直在不断地改进和变化.紫砂壶的始源可以追溯到北宋年间,但是直到明代中期,以“泡茶”替代“烹煎”的
<正> 我国第二大岛海南岛,现有居民主要分属于汉、黎、苗、回等族,最有一种讲汉藏语系壮侗语族壮傣语支语言的人,民族成分未定,1980年统计人口约50.6万人。据1982年第三次全国人口普查资料,海南行政区全岛人口约共566.7万余人,其中汉族约478.9万余人,黎族约81万人,苗族约4.09万人,回族约4100余人。