使用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实现的MySQL数据浏览器
Mar 11 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php自动加载方式集合
Apr 04 PHP
jQuery+php简单实现全选删除的方法
Nov 28 PHP
PHP new static 和 new self详解
Feb 19 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 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自定义apk安装包实例
2014/10/20 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
Python中Proxypool库的安装与配置
2018/10/19 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
Python帮你识破双11的套路
2019/11/11 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
python爬虫基础之urllib的使用
2020/12/31 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
十佳大学生村官事迹
2014/01/09 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
2014年法务工作总结
2014/12/11 职场文书