整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

php只能做网站?基于swoole+websocket开发双向通信应用

众所周知,PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议,只能接收客户端的请求,然后响应请求,不能主动向客户端推送信息。因此,一些实时性要求比较高的应用,如实时聊天、直播应用、在线网页游戏等,就不适合采用HTTP协议。即使采用客户端主动轮询的方式来间接实现双向通信,也会较大地增加服务器的负担,增大代码的复杂性,不利于维护。

双向通信

那么,是否PHP就无法用来开发双向通信的应用呢?

答案是否定的。PHP内置socket通信支持,可以与linux程序基于socket进行双向通信。php swoole框架封装了一个websocket服务端,基于此可以很方便地建立一个与html5的websocket客户端进行通信的服务。

一、Swoole介绍

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

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

简单地来说,websocket协议实现了浏览器和服务器之间的双向通信。而html5原生支持websocket协议。

三、swoole websocket 服务端demo

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 启动服务。

四、HTML5 WebSocket 客户端demo

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,保存文件。

五、测试demo

(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开发效率高,可以更快、更高效地进行此类应用地开发,节约开发成本。

大家如果还有什么疑问,可以关注公众号“全栈社区”进行提问。


  • 关注微信公众号“全栈社区”,可获取更多站长、开发者必备的前端、后端、服务器技术干货。
  • 旭猫云19元VPS:www.xumaoyun.com

 随着市场对前端开发技术的使用越来越广泛,技术要求越来越高,这也使得对前端开发人才的需求量越来越多,要求也越来越高。尽管如今学习前端开发的人趋之若鹜,不过零基础学习前端开发,这三个问题必须了解清楚。

 一、零基础学习前端开发需要哪些技术?

  ①初级阶段:

  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培训机构时,一定要慎重对自己的未来负责。