众所周知,PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议,只能接收客户端的请求,然后响应请求,不能主动向客户端推送信息。因此,一些实时性要求比较高的应用,如实时聊天、直播应用、在线网页游戏等,就不适合采用HTTP协议。即使采用客户端主动轮询的方式来间接实现双向通信,也会较大地增加服务器的负担,增大代码的复杂性,不利于维护。
双向通信
那么,是否PHP就无法用来开发双向通信的应用呢?
答案是否定的。PHP内置socket通信支持,可以与linux程序基于socket进行双向通信。php swoole框架封装了一个websocket服务端,基于此可以很方便地建立一个与html5的websocket客户端进行通信的服务。
swoole
Swoole是一个面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升。
swoole支持用于搭建多种server,包括http server、websocket server、tcp server、redis server等等。这里我们使用到的是其中的websocket server。
WebSocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
简单地来说,websocket协议实现了浏览器和服务器之间的双向通信。而html5原生支持websocket协议。
1.安装swoole
swoole以php扩展的形式进行加载,首先需要为你的php安装swoole扩展,安装命令如下:
pecl install swoole
安装成功后在php.ini文件加上extension=swoole.so加载扩展
2.启动服务端
新建一个php文件,文件名为server.php,文件内容如下:
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $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}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) { global $server;//调用外部的server // $server->connections 遍历所有websocket连接用户的fd,给所有用户推送 foreach ($server->connections as $fd) { // 需要先判断是否是正确的websocket连接,否则有可能会push失败 if ($server->isEstablished($fd)) { $server->push($fd, $request->get['message']); } } }); $server->start();
此服务监听本机的9501端口,运行命令 php server.php 启动服务。
1.客户端代码
新建一个testServer.html文件,写入以下内容:
<!doctype html> <html> <head> <title>测试WebSocket</title> </head> <body> <script> var ws = new WebSocket("ws://【服务端IP】:9501"); ws.onopen = function(event){ console.log("connected!"); ws.send("hello server,this is client!"); }; ws.onmessage= function(event){ console.log("server message:"+event.data); } ws.onclose = function(event){ console.log("closed!"); }; </script> </body> </html>
将【服务端IP】替换成swoole服务端ip,保存文件。
(1) 访问步骤四的客户端demo页面,首先与服务端建立连接,查看浏览器console log,可以看到显示:
connected!
(2) 查看linux控制台,可以看到显示:
server: handshake success with fd1
(3) 接着客户端向服务端发了一条消息,服务端控制台显示:
receive from fd1:hello server,this is client!
(4) 服务端收到消息后,向客户端回复了一条消息,客户端控制台显示:
server message:this is server
以上就是基于swoole+websocket开发双向通信应用的简单演示,在线聊天、网页游戏等实时通信的应用也可基于此方式进行开发。php开发效率高,可以更快、更高效地进行此类应用地开发,节约开发成本。
大家如果还有什么疑问,可以关注公众号“全栈社区”进行提问。
随着市场对前端开发技术的使用越来越广泛,技术要求越来越高,这也使得对前端开发人才的需求量越来越多,要求也越来越高。尽管如今学习前端开发的人趋之若鹜,不过零基础学习前端开发,这三个问题必须了解清楚。
①初级阶段:
html:常见标签,html5新增的,语义化标签等等
css:选择器,背景,文本,链接,列表,盒模型,定位,浮动,css3新增的属性
bootstrap:栅格化系统,按钮,表单,导航....
javascript: 数据类型,对象,函数,运算符,语句,DOM,选择器,操作,事件...
jQuery: 选择器,dom,链式调用,事件,动画
②进阶阶段:
入门:js的面向对象编程, zepto,移动端,响应式,css3d,bootstrap组件,jqueryUI
高级数据:面向对象进阶,ajax,json,(后端语言:php)
新兴的技术:html5: socket, 多媒体,canvas,图像处理,web works,数据存储,跨域。
技术拓展:地图开发,微信开发,大数据可视化...
后端服务:nodejs:文件系统,路由,mongodb, express....
③高级阶段:
架构基础:设计模式,MVC, MVVM
模块化开发:amd,cmd, commonjs,systemjs
css预编译:less, sass,stylus
前沿规范:ES5, ES6, ES2016, ES2017, typescript
新型框架:backbone, vue, vuex, angular, react, redux, reflux, flux, angular5等等。
pc端:基础技术,一些框架
移动端:基础,移动端框架
nodejs服务器端:了解服务器,以及node的框架
游戏端:html5游戏,cavnas
大数据可视化:highcharts等等
前端架构:设计模式,架构,开发工程化工具,通用组件,通用插件
全栈工程师,会前端也会后端,
其他语言可能是伪全栈(只能写后台管理系统)
混合开发:react native
在工作中,我们都是在写项目,所以学习我们不能仅仅学习某个点,更重要的是多写项目。我们需要在培训学习的过程中实战各个领域的项目,了解更多的技术。
如果你对前端开发学习感兴趣想要免费教程可私信,还可阅读:学习web前端需要掌握哪些技术?学web前端开发需要多久? - 千锋教育
下HTMl5培训越来越激烈,许多的培训机构更是打出了各种诱人的广告,也正是因为这些广告无疑增加了我们的选择难度。我们该如何选择HTML5培训班呢?且看华清远见如何为初学者支招
首先了解HTML5培训是什么?
培训HTML5不仅是简单的学习HTML5的知识,在学习的过程中我们会涉及到,CSS、前端、js的知识的,所以HTMl5也可以称之为前端培训。对于网站来讲可以分为前端和后端,前端的应用和网页直接展示给客户而后端的只是为前台服务的。由此可知,前端的重要性不言而喻。目前微信、淘宝、一些游戏等等都是通过前端开发来做的,这其中UI在整个前端工作中所占比重为10%,js所占比重为30%左右,剩余的大部分工作都是通过HTML5开发来完成的。目前HTML5培训主要集中在培训学员HTML5相关技能方面。
其次,了解HTML5培训主要学习什么?
第一阶段:web页面制作基础;精通掌握HTML5应用,掌握CSS在开发中的应用,学会页面标准化布局。
第二阶段:能独立设计具有创意、能够独立设计出手机移动网站、掌握标准化布局中的各项技术、符合需求的web界面,掌握页面设计和原型图制作。
第三阶段:掌握js的基本抄作流程与基本语法,结合HTML实现代表性的在制作出js特效制作,可以独立完成第三方特效插件和网页中常见特效的使用。
第四阶段:后端开发技术,了解 PHP 语法,掌握 Socket 长连接实时网络通信技术,掌握 NoSQL中的MongoDB 的应用,掌握http与web工作原理,解 MySQL 数据库的基本操作。
第五阶段:移动互联网应用,掌握 HTML5 新增智能表单的使用,制作播放器对搜索引擎优化进行讲解,掌握优化的各种方式,掌握响应式页面布局技术,掌握微网站的开发过程及开发移动端web应用。
第六阶段:特效开发高级实战,利用jQuery框架进行js特效开发,掌握 AngularJS 框架应用、掌握 Bootstrap 的使用,掌握 jQuery Mobile 的应用开发移动应用程序。
第七阶段:企业级应用开发,使用 web 制作 LBS 应用程序;在应用中使用多线程技术完成 UI 交互与数据处理并行,了解和掌握 PhoneGap 的安装和操作,能够使用 PhoneGap 进行封装,实现跨平台的应用,了解和掌握触屏和手势相关的事件使用方式,能够通过媒体查询和多列布局属性实现屏幕自适应,实现响应式布局了解和掌握不同的设计模式以及其适合的企业APP,并且能够将其应用在程序设计中。
最后,怎样选择HTML5培训机构?
第一,初学者在选择的时候不能只看谁家的广告做的多、口号响亮,而是要看能不到真正学到技术,得到锻炼;
第二,选择的时候不能只听别人的评价,一定要去做实地考察,培训班允许的情况下去试听相应的课程;在试听课程的过程中感受课程设置是否符合自身的成长;
第三,对于相应的就业服务一定要搞清楚,确定是否推荐就业、是否保障最低薪资等等。
华清远见初学者在选择HTML5培训机构时,一定要慎重对自己的未来负责。
*请认真填写需求信息,我们会在24小时内与您取得联系。