当前位置: 首页 > 后端技术 > PHP

基于Swoole的WebSocket服务详解

时间:2023-03-29 22:00:41 PHP

本节将对以下四个问题进行详细讲解:什么是swoole?什么是网络套接字?如何基于Swoole搭建WebSocket服务?基于Swoole的WebSocket服务和Http服务有什么关系?一、Swoole简介Swoole是一个用于生产环境的PHP异步网络通信引擎,使PHP开发者能够编写高性能的异步并发TCP、UDP、UnixSocket、HTTP和WebSocket服务。Swoole可广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。使用PHP+Swoole作为网络通信框架,可以大大提高企业IT研发团队的工作效率。Swoole支持搭建各种服务器,包括HTTP服务器、websocket服务器、tcp服务器、redis服务器等。我们在这里使用websocket服务器。2.WebSocket简介WebSocket是一种通过单个TCP连接进行全双工通信的协议。WebSocket通信协议在2011年被IETF指定为标准RFC6455,并由RFC7936补充。WebSocketAPI也被W3C指定为标准。WebSocket使客户端和服务器之间的数据交换更加容易,并允许服务器主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要握手一次,就可以直接建立持久连接进行双向数据传输。简单的说,websocket协议实现了浏览器和服务器之间的双向通信。Html5原生支持websocket协议。3、如何基于Swoole搭建WebSocket服务新建一个名为ws_server.php的文件,代码如下:在命令行执行如下命令即可启动WebSocket服务。命令如下:phpws_websocket.php可以在Chrome浏览器中测试,JS代码如下:在Chrome浏览器的控制台执行上面的js代码,可以看到如下输出:ConnectedtoWebSocket服务器。客户端向服务端发送数据,可以通过WebSocket的send函数向服务端发送信息:socket.send('sentcontent');//socket是WebSocket的一个对象实例4.WebSocket服务与Http的关系基于SwooleWebSocket的服务服务是一个基于Http服务的长连接服务器,客户端会先发送一个Http请求与服务器握手。当握手成功时,将触发onOpen事件。在onOpen函数中,可以得到一个$request对象,里面包含了Http握手的相关信息,比如GET参数、Cookie、Http头信息等。当客户端和服务器建立连接后,客户端和服务器可以双向通信。连接建立后,当客户端向服务端发送信息时,服务端会触发onMessage事件回调;服务器可以调用$server->push()向客户端发送消息。服务器可以设置onHandShake事件回调来手动处理WebSocket握手。注:SwoleHttpserver是swoleHttpserver的子类,内置了对Http的支持。swoleWebSocketserver是swolehttpserver的子类。由于内置了WebSocket支持,swoole_client无法直接与WebSocket服务器通信。swoole_client是一个TCP客户端,必须实现WebSocket协议才能与WebSocket服务通信。WebSocket服务除了提供WebSocket功能外,其实还可以处理Http长连接。Comet方案的长Http轮询只能通过监听onRequest事件来实现。点击此处下载完整附件