使用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用户指南-cookies部分
Oct 09 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
php array的学习笔记
May 16 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
PHP会话控制实例分析
Dec 24 PHP
Laravel中的Auth模块详解
Aug 17 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP 断点续传实例详解
Nov 11 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 PHP
实例化php类时传参的方法分析
Jun 05 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
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
简单解析Django框架中的表单验证
2015/07/17 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python装饰器用法实例总结
2018/05/26 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
初一生物教学反思
2014/01/18 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
小学作文之描写天气
2019/08/15 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
解析python中的jsonpath 提取器
2022/01/18 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers