用PHP和Websocket实现实时通讯

说到websocket大家一定不会陌生,WebSocket是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成,当浏览器和服务器握手成功后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。有了websocket, 大家就可以摒弃以往用轮询来实现实时通讯的方式了。
有了websocket后,应运而生的相关产品也不在少数,选择也成了最大的问题,在这里你可能会说“干嘛用别人的,我可以自己用原始的开发一个啊” 对此我只想说你真NB,我也很想知道你是如何解决以下问题的:
1.        你是打算花1个月,2个月还是1年还实现一个websocket通信的?如果你说你打算花一个月,那说明两点,你的技术要上天了(这么刁的东西你可以那么快弄出来还不存在性能问题,除了我现有的膝盖,请把我下辈子的膝盖也拿走),贵公司土豪(贵公司对技术的炙热追求已经达到了行业的巅峰了,看来你们的项目不是很紧嘛,预算挺多嘛,告诉我贵公司的名字我也来钻研技术,哈哈哈)
2.        Websocket只支持ie10+, chrome, firefox, safari, opera. 不说多了,当前IE9及低版本的用户群体还有很多,你是怎么觉得这些低版本浏览器的实时通讯的?
上面两个问题无非就是涉及到两方面问题:开发成本和浏览器兼容性问题。站在管理者角度来看,都希望尽可能多的压缩开发成本,所有选择第三方推送服务是众多企业的一个理性选择。
选择产品时需要注意以下几点:
1.        代码结构是否清晰易懂
2.        消息到达率怎么样,数据到达情况是否可视
3.        浏览器兼容性如何
4.        产品的稳定性和安全性
好,重点来了,我不去评判其他产品的优缺点,只给出我对我最终选择的产品-GoEasy推送作一个单方面的评价。GoEasy推送满足我上面列的所有指标。
1.        代码结构是否清晰易懂
GoEasy的代码分为订阅和推送两部分:
订阅时,只需要三句代码:
a.        引入goeasy.js (文件非常小)
<script type="text/javascript" src="http://cdn.goeasy.io/goeasy.js"></script>

 

b.        创建goeasy实例
var goEasy = new GoEasy({appkey: 'appkey'});

 

c.        订阅channel.

              

      goEasy. subscribe({channel: 'channel1',onMessage: function(message){alert('Meessage received:'+message.content);//接收到推送的消息}});

 

推送时,用goeasy提供的restful api来实现,api只需要三个参数即可:

URL: http://goeasy.io/goeasy/publish

Method: Post

Parameters: appkey, channel, content

2.        消息到达率怎么样,数据到达情况是否可视
我们项目的用户并发量目前最高在300人的样子,每天会推送30条消息的样子,每条消息的到达情况都可以在goeasy后台页面进行查看。至于到达率,我们项目的对到达率的要求是98%, 就目前来看GoEasy应该是100%的到达率。
3.        浏览器兼容性如何
除了常用的浏览器chrome, firefox, safari, opera外还支持IE 6到IE11的版本,低版本IE浏览器GoEasy采用的是polling的方式。GoEasy在兼容性这方面做的很不错。
4.        产品的稳定性和安全性
稳定性的判定:项目已经持续运行了4个月了,没有出现过消息推不出或接收不到的情况。
安全性的判定:GoEasy在安全控制方面主要是通过appkey来控制,创建好app后系统会生成两个key,一个既可以用来接收又可以用来推送,另一个只可以用来接收。所以用户可以选择性的暴露你的key.
这样轻松用PHP实现客户端与服务器端的实时通信了。
PHP websocket实时消息推送
 

转载于:https://www.cnblogs.com/emmamao/p/6203133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABB SocketReceive 套接口 函数

SocketReceive函数使用方法&#xff1a; SocketReceive 从远程计算机接收数据。 SocketReceive 可以被客户端和服务器程序使用。 基本样例&#xff1a; 下述样例说明了 SocketReceive 的语法: Example 1 VAR string str_data; ... SocketRe…

【数据库学习笔记】——创建数据库连接对象connection

目录 connect函数的参数 创建连接对象连接MySQL代码 连接对象常见属性与方法 事务名词解释 课程视频链接&#xff1a; 第14节 Python操作数据库_哔哩哔哩_bilibili666https://www.bilibili.com/video/BV1q54y147KX?fromsearch&seid968950907021994347&spm_id_from3…

数据库常用增删改查记录等语句

1增 1.1【插入单行】insert [into] <表名> (列名) values (列值)例&#xff1a;insert into Strdents (姓名,性别,出生日期) values (开心朋朋,男,1980/6/15) 1.2【将现有表数据添加到一个已有表】insert into <已有的新表> (列名) select <原表列名> from &…

一个关于pynoi游戏的C语言编程

“去吧&#xff0c;秦&#xff0c;好好享受这个夜晚&#xff0c;我给你准备了一份礼物&#xff0c;希望你能喜欢。”小布莱克眨着眼睛笑道&#xff0c;狡猾的像一头小狐狸。转载于:https://www.cnblogs.com/jackey18/p/8260774.html

【数据库学习笔记】——cursor游标对象

目录 1、创建cursor对象 2、cursor对象常用方法 3、操作数据库的常见流程&#xff08;五部曲&#xff09; 课程视频链接&#xff1a; 第14节 Python操作数据库_哔哩哔哩_bilibili666https://www.bilibili.com/video/BV1q54y147KX?p2&spm_id_frompageDriver 1、创建cu…

ABB 压包指令PackRawBytes 解包指令UnpackRawBytes

ABB 压包指令PackRawBytes 解包指令UnpackRawBytes PackRawBytes- 将数据导入 rawbytes 数据。 使用方法 PackRawBytes 用于将 num, dnum, byte,或者 string类型的数据&#xff0c;打包到 rawbytes 类型的变量中. 基本举例 &#xff1a; VAR rawbytes …

Android Https相关完全解析 当OkHttp遇到Https

Android Https相关完全解析 当OkHttp遇到Https转载于:https://www.cnblogs.com/zhujiabin/p/5304617.html

基于ARM核AT75C220在指纹识别系统中应用

纹识别技术近年来逐渐成熟&#xff0c;在门禁、安防和金融等方面得到了越来越广泛的应用。典型的指纹识别系统是以指纹传感器和DSP处理器为核心构成。指纹传感器采集指纹图像&#xff0c;DSP处理器实时实现指纹识别算法。同时&#xff0c;通常的指纹识别系统还具有较强的通信能…

【数据库学习笔记】——创建数据库文件

目录 1、数据库基础知识 2、创建数据库文件 1、数据库基础知识 什么是数据库&#xff1f;——数据库是存放多个数据表的仓库&#xff0c;数据表可以理解为是二维数组 如上表所示&#xff0c;每个表由行列组成&#xff1a; 字段&#xff1a;每一列称之为一个字段&#xff0c;每…

岁月在流逝,从阿里退下来接近70后程序猿带给我的启示

大家好&#xff0c;今天为大家带来一个非常励志&#xff0c;让我反思的故事。今天为大家讲的是我父亲是如何用行动教会我成为程序员的。 岁月的锤炼 圆口接口的键盘&#xff0c;2003年的 有人问这个键盘难道没有擦过吗&#xff1f;不是的&#xff0c;是擦不掉的岁月痕迹。如果有…

浅谈工业机器人的运动停止

德系的工业机器人系统中&#xff0c;对于机器人停止运动&#xff0c;定义了3种模式&#xff0c;比如 KUKA 的工业机器人分别定义了 Stop 0 &#xff0c;Stop 1&#xff0c;Stop 2 (*注1)。这种定义模式是与机器人的机械结构和电气结构相关联的。 对于此&#xff0c;读者应该先了…

MySQL 数据表备份导出,恢复导入操作实践

因为经常跑脚本的关系&#xff0c; 每次跑完数据之后&#xff0c;相关的测试服数据库表的数据都被跑乱了&#xff0c;重新跑脚本恢复回来速度也不快&#xff0c;所以尝试在跑脚本之前直接备份该表&#xff0c;然后跑完数据之后恢复的方式&#xff0c;应该会方便一点。所以实践一…

js实现去重字符串

实现去重字符串主要是把重复的字符与原来的字符&#xff08;先push()进入一个数组存起来&#xff09;相匹配&#xff0c;如果match返回的不是null则说明重复&#xff0c;就删除掉&#xff1a; <script>var str prompt("请输入一个字符串&#xff1a;", "…

ABB 机器人 IsStopMoveAct 指令 - Is stop move flags active

IsStopMoveAct - Is stop move flags active 用法&#xff1a; IsStopMoveAct 用于得到当前或连接运动任务的 停止移动位状态。 is used to get the status of the stop move flags for a current or connected motion task. 基本示例&#xff1a; stopflag2:…

【数据库学习】——数据库可视化--Navicat下载安装连接教程

目录 进入网站 下载可视化软件 安装 双击桌面图标&#xff0c;选择试用 连接数据库 查看数据库中的表&#xff0c;如下所示 常用数据库有&#xff1a; MySQL、sqlite等 进入网站 Navicat | 产品https://www.navicat.com.cn/products 下载可视化软件 这里以数据库sql…

机器学习笔记1(K-近邻算法)

人生苦短&#xff0c;我用PythonK-近邻算法&#xff1a;简单来说&#xff0c;K-近邻算法就是采用测量不同特征值之间的距离方法进行分类优点&#xff1a;精度高、对异常值不敏感、无数据输入假定缺点&#xff1a;计算复杂度高、空间复杂度高适用范围&#xff1a;数值型、标称型…

C# 格式化字符串

原文地址&#xff1a;http://www.cnblogs.com/zyh-nhy/archive/2007/10/11/921240.html 1 前言如果你熟悉Microsoft Foundation Classes&#xff08;MFC&#xff09;的CString&#xff0c;Windows Template Library&#xff08;WTL&#xff09;的CString或者Standard Template …

【数据库学习笔记】——操作sqlite(增删改查)以及cursor的方法介绍

目录 1、sqlite数据库介绍 1&#xff09;常见的数据库操作 2&#xff09;数据操作常见步骤 2、向数据表中增加数据&#xff08;insert into&#xff09; 1&#xff09;向数据表中添加一条记录 2&#xff09;向数据表中一次性添加多条记录 ​ 3、修改数据表中已有的数据 1)…

springMVC分析-2

springMVC的请求映射 上一次分析了一下springMVC的大致流程&#xff0c;这次细分一下&#xff0c;对请求映射进行分析。 先从DispatcherServlet中的getHandler()方法分析 protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {for (Hand…

简单消息协议

简单消息协议&#xff1a;定义了ROS与工业机器人之间简单的消息协议。额外的处理程序和管理器类包含用于处理有限连接的系统。这个包是ROS-Industrial计划的一部分。 简单消息协议定义了ROS驱动层与机器人控制器层通信的消息结构。该消息结构符合下列要求&#xff1a; 1、结构足…