使用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发电子邮件
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
PHP分页显示制作详细讲解
Nov 19 PHP
PHP 数组基础知识小结
Aug 20 PHP
小谈php正则提取图片地址
Mar 27 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 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 文件类型判断代码
2009/03/13 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python读取并写入mat文件的方法
2019/07/12 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
python设置环境变量的作用整理
2020/02/17 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
物业招聘计划书
2014/01/10 职场文书
国际贸易系求职信
2014/08/09 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2014年度培训工作总结
2014/11/27 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
节水倡议书
2015/01/19 职场文书
2015年公司工作总结
2015/04/25 职场文书
导游词之江南周庄
2019/12/06 职场文书
Mysql中常用的join连接方式
2022/05/11 MySQL