使用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.MVC的模板标签系统(二)
Sep 05 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
Codeigniter操作数据库表的优化写法总结
Jun 12 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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
如何给phpadmin一个保护
2006/10/09 PHP
php仿discuz分页效果代码
2008/10/02 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python中的随机函数random的用法示例
2018/01/27 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
高中校园广播稿
2014/01/11 职场文书
丧事主持词大全
2014/04/02 职场文书
协议书格式
2014/04/23 职场文书
产品销售计划书
2014/05/04 职场文书
针对吵架老公保证书
2015/05/08 职场文书
搭讪开场白台词大全
2015/05/28 职场文书