使用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中的Class的几点个人看法
Oct 09 PHP
打造计数器DIY三步曲(下)
Oct 09 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
php ajax 静态分页过程形式
Sep 02 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
PHP递归创建多级目录
Nov 05 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP实现验证码校验功能
Nov 16 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字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
解决Mac下使用python的坑
2019/08/13 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
python 绘制正态曲线的示例
2020/09/24 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
物业管理应届生求职信
2013/10/28 职场文书
中英文自我评价常用句型
2013/12/19 职场文书
七年级生物教学反思
2014/01/30 职场文书
银行办公室岗位职责
2014/03/10 职场文书
伊琍体标语
2014/06/25 职场文书
师德师风剖析材料
2014/09/30 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
MySQL 字符集 character
2022/05/04 MySQL