使用php+swoole对client数据实时更新(一)_php实例

如果想对一个列表做实时的更新,传统的做法是采用轮询的方式。以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扩展的方法

本文先写到这里,下一篇会写一些更具体的操作,感兴趣的朋友请继续关注本站。谢谢!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索swoole_client
php实时更新
swoole client、swoole http client、swoole client 长连接、swoole socket client、swoole 异步client,以便于您获取更多的相关知识。

时间: 2024-10-02 08:21:20

使用php+swoole对client数据实时更新(一)_php实例的相关文章

使用php+swoole对client数据实时更新(二) (转)

上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终端的情况下,都可以完美的和服务端兼容.这样就轻松实现了MVC各个部分的真正解耦.但是提高程序的友好性还是有很多路要走,其中一个大家都会遇到的就是数据实时更新的问题.比如一个用户在手机上做了添加操作,这时候其他的终端也应该及时显示数据的变化情况.这个对于手机来说还算好办,因为现在的各种推送服务完全可以

Thinkphp批量更新数据的方法汇总_php实例

以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: //批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_update($table_name='',$data=array(),$field=''){ if(!$table_name||!$data||!$field){ return false; }else{ $sql='UPDATE '.$table_name

浅析php设计模式之数据对象映射模式_php实例

php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位. 数据映射模式使您能更好的组织你的应用程序与数据库进行交互. 数据映射模式将对象的属性与存储它们的表字段间的结合密度降低.数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然. 数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息 重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关

网站缓存数据实时更新的实现

一个网站的实现不可避免的需要处理大量的内存数据,这大多都出于网站性能的考虑和解决I/O瓶颈问题,如JavaEye网站的首页排名数据和博客频道的排名等数据,都进行了缓存处理,而且并非是实时的,特别是首页的排名数据几乎是一天才会更新一次的,同样,QQ等门户网站也存在大量静态化内存数据,所以一个网站缓存的处理是至关重要的,并且好的架构需要做到代码无侵入性,也就是说内存的更新,日志的记录等操作都应该是"切面"处理,在我后来的网站开发中,我一般都会定义一个缓存类,如下: Java代码 publi

gridview 数据实时更新的问题

问题描述 [img=http://static1.photo.sina.com.cn/middle/3e9c041444093b9b548d8&000][/img]上面点击入库后下面gridview马上在对应的项更新数据,这个怎么实现啊.帮忙教下我啊,谢谢. 解决方案 解决方案二:没图片了重新绑定解决方案三: 解决方案四:顶下解决方案五:提交入库后,重新刷新页面或者用<asp:UpdatePanel实现无刷新的gridview加载最新数据.解决方案六:服务器端动态加载客户端脚本stringm

基于Swoole实现PHP与websocket聊天室_php实例

websocket Websocket只是一个网络通信协议 就像 http.ftp等都是网络通信的协议:不要多想: 相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebSocket和HTTP的关系 有交集,但是并不是全部. Websocket只是借用了HTTP的一部分协议来完成一次握手.(HTTP的三次握手,此处只完成一次) http和websocket 请求头对比: HTTP: 原来的时候,客户端通过http(骑马)带着信请求服务器,服务器处理请求(写回信

php+ajax注册实时验证功能_php实例

ajax的实时验证技术已经很成熟了,在一些规范的网站上,如果有注册验证的模板,必定会涉及到ajax的无刷新验证,这在用户注册的体验中是很棒的,对比一个不能及时和后台无刷新对接的验证模式,要重新返回来刷新,这对于用户来说,体验上是很不友好的. ajax的模式几乎是所有站点应用的需求,ajax作为前端无刷新验证,可以和所有后台语言进行组合使用,比如asp+ajax,php+ajax,.net+ajax等等组合,这里主要讲解的是php+ajax的注册验证. 下面的验证是一个完整的实例,我们在网站上面注

Yii学习总结之数据访问对象 (DAO)_php实例

Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS).使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码. 数据访问对象(DAO) 对访问存储在不同数据库管理系统(DBMS)中的数据提供了一个通用的API. 因此,在将底层 DBMS 更换为另一个时,无需修改使用了 DAO 访问数据的代码. Yii DAO 基于 PHP

CI框架入门示例之数据库取数据完整实现方法_php实例

本文实例讲述了CI框架入门示例之数据库取数据完整实现方法.是写给初学者看的,这是最简单可以调通的例子.分享给大家供大家参考.具体实现方法如下: 1.下载CI框架 2.配置 database.php配置: 为数据库服务器设置 connection 参数: 复制代码 代码如下: $db['default']['hostname'] = "your-db-host";  $db['default']['username'] = "your-username";  $db[