使用php+swoole对client数据实时更新(一)


Posted in PHP onJanuary 07, 2016

如果想对一个列表做实时的更新,传统的做法是采用轮询的方式。以web为例,通过Ajax定时请求服务端然后获取数据显示在页面。这种方式实现简单,缺点就是浪费资源。

HTTP1.1新增加了对websocket的支持,这样就可以将被动展示转变为主动通知。也就是通过websocket与服务端保持持久链接,一旦数据发生变化,由server通知client数据有更新,然后再进行刷新等操作。这样就省去了很多不必要的被动请求,节省了服务器资源。

要实现一个webscoket的程序,首先需要使用支持html5的浏览器

if(ws === null){
var wsServer = 'ws://'+ location.hostname +':8888';
ws = new WebSocket(wsServer);
ws.onopen = function(){
console.log("socket连接已打开");
};
ws.onmessage = function(e){
console.log("message:" + e.data);
};
ws.onclose = function(){
console.log("socket连接已断开");
};
ws.onerror = function(e){
console.log("ERROR:" + e.data);
};
//离开页面时关闭连接
$(window).bind('beforeunload',function(){
ws.close();
}
);
}

这样就实现了一个client,不过事情还远没有结束。上面的代码只是简单的进行了连接,对话,关闭等基本动作。如果想和服务端进行通讯,必须要有更具体的方案。比如收到message时判断类型进行进一步操作。

服务端:此处采用Swoole进行php服务端的websocket开发,使用swoole进行php的websocket开发非常简单,而且它还支持httpserver的支持。

$server = new swoole_websocket_server("0.0.0.0", 8888);
$server->on('open', function (swoole_websocket_server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";
});
$server->on('message', function (swoole_websocket_server $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
$server->push($frame->fd, "this is server");
});
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
$server->start();

swoole是一个php的扩展,安装方式可以参考这里:php安装swoole扩展的方法

本文先写到这里,下一篇会写一些更具体的操作,感兴趣的朋友请继续关注本站。谢谢!

PHP 相关文章推荐
PHP 文件扩展名 获取函数
Jun 03 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
Linux下php5.4启动脚本
Aug 03 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 #PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 #PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 #PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 #PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 #PHP
我整理的PHP 7.0主要新特性
Jan 07 #PHP
php上传图片生成缩略图(GD库)
Jan 06 #PHP
You might like
PHP Session变量不能传送到下一页的解决方法
2009/11/27 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
js实现随机点名
2021/01/19 Javascript
Django实现组合搜索的方法示例
2018/01/23 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python实现梯度法 python最速下降法
2020/03/24 Python
python 决策树算法的实现
2020/10/09 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
化工专业大学生职业生涯规划书
2014/01/14 职场文书
模范教师事迹材料
2014/02/10 职场文书
优秀班主任申报材料
2014/12/16 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
高中生物教学反思
2016/02/20 职场文书
个人道歉信大全
2019/04/11 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL