使用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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php curl选项列表(超详细)
Jul 01 PHP
php curl模拟post请求小实例
Nov 13 PHP
php格式化日期实例分析
Nov 12 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 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 autoload机制的详解
2013/06/09 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
Python常见工厂函数用法示例
2018/03/21 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python多线程同步之文件读写控制
2021/02/25 Python
Python的Lambda函数用法详解
2019/09/03 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
海外淘书首选:AbeBooks
2017/07/31 全球购物
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
个人自我鉴定怎么写
2013/10/28 职场文书
毕业生文员求职信
2013/11/03 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
放飞理想主题班会
2015/08/14 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL