使用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设计模式 Composite (组合模式)
Jun 26 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
PHP header()函数常用方法总结
Apr 11 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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 ZipArchive压缩函数详解实例
2013/11/06 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python通过smpt发送邮件的方法
2015/04/30 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
python实现三维拟合的方法
2018/12/29 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python文件读写代码实例
2019/10/21 Python
python二维键值数组生成转json的例子
2019/12/06 Python
python数据类型强制转换实例详解
2020/06/22 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
品管员岗位职责
2013/11/10 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
群教班子对照检查材料
2014/08/26 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
课外访万家心得体会
2014/09/03 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书