前言
众所周知,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协议。
三、swoole websocket 服务端demo
1.安装swoole
swoole以php扩展的形式进行加载,首先需要为你的php安装swoole扩展,安装命令如下:
pecl install swoole
安装成功后在php.ini文件加上extension=swoole.so加载扩展
2.启动服务端
新建一个php文件,文件名为server.php,文件内容如下:
$server = new SwooleWebSocketServer("0.0.0.0