使用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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
PHP 图片水印类代码
Aug 27 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 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 无限级分类
2017/05/04 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Python连接phoenix的方法示例
2017/09/29 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
自我鉴定思想方面
2013/10/07 职场文书
白莲教口号
2014/06/18 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
整理Python中常用的conda命令操作
2021/06/15 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis