使用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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
图书管理程序(二)
Oct 09 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php数组去重实例及分析
Nov 26 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
php metaphone()函数的定义和用法
May 15 PHP
php session的应用详细介绍
Mar 22 PHP
PHP7 整型处理机制修改
Mar 09 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
p5.js绘制旋转的正方形
2019/10/23 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
详解python with 上下文管理器
2020/09/02 Python
python实现图片转字符画
2021/02/19 Python
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
水果超市创业计划书
2014/01/27 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
活动总结模板大全
2015/05/11 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技