Explicación detallada de la construcción del servicio WebSocket basado en Swoole

Esta sección abordará las siguientes 4 preguntas en detalle:

¿Qué es un swoole?

¿Qué es Websocket?

¿Cómo construir un servicio WebSocket basado en Swoole?

¿Cuál es la relación entre el servicio WebSocket basado en Swoole y el servicio Http?

1. Introducción a Swoole

Swoole es un motor de comunicación de red asíncrona PHP listo para producción que permite a los desarrolladores de PHP escribir servicios TCP, UDP, Unix Socket, HTTP y WebSocket asíncronos concurrentes de alto rendimiento. Swoole se puede usar ampliamente en Internet, comunicación móvil, software empresarial, computación en la nube, juegos en línea, Internet de las cosas (IOT), Internet de los vehículos, hogar inteligente y otros campos. El uso de PHP+Swoole como marco de comunicación de red puede mejorar en gran medida la eficiencia del trabajo de los equipos de I+D de TI empresariales.

El soporte de Swoole se usa para construir una variedad de servidores, incluidos servidores HTTP, servidores websocket, servidores tcp, servidores redis y más. Estamos usando un servidor websocket aquí.

2. Introducción a WebSocket

WebSocket es un protocolo para la comunicación full-duplex sobre una única conexión TCP. El protocolo de comunicación WebSocket fue especificado por el IETF en 2011 como estándar RFC 6455, complementado por RFC7936. La API de WebSocket también está designada como estándar por el W3C. WebSocket facilita el intercambio de datos entre el cliente y el servidor y permite que el servidor envíe datos al cliente de forma activa. En la API de WebSocket, el navegador y el servidor solo necesitan darse la mano una vez y pueden crear directamente una conexión persistente para la transmisión de datos bidireccional.

En pocas palabras, el protocolo websocket implementa una comunicación bidireccional entre el navegador y el servidor. Html5 admite de forma nativa el protocolo websocket.

3. Cómo construir un servicio WebSocket basado en Swoole

Cree un nuevo archivo llamado ws_server.php con el siguiente código:

Puede iniciar el servicio WebSocket ejecutando el siguiente comando en la línea de comando. El comando se ve así:

php ws_websocket.php

可以在 Chrome 浏览器进行测试,JS 代码如下:

在 Chrome 浏览器的控制台上执行上述 js 代码,可以看到以下输出结果:

Connected to WebSocket server.

如果要从客户端向服务器发送数据,可以通过 WebSocket 的 send 函数向服务器发送信息:

**socket.send (' 发送的内容 '); **//socket 为 WebSocket 的对象实例

四、基于 Swoole 的 WebSocket 服务和 Http 服务的关系

WebSocket 服务是基于 Http 服务的长连接服务器,客户端首现会发送 Http 请求与服务器握手。当握手成功时,将触发 onOpen 事件。在 onOpen 函数中,可以获得一个 $request 对象,该对象包含与 Http 握手相关的信息,如 GET 参数、Cookie、Http 头信息等。

当客户端和服务器之间的连接建立后,客户端和服务器可以进行双向通信。连接建立后,当客户端向服务器发送信息时,服务器会触发 onMessage 事件回调;服务器可以调用 $server->push () 向客户端发送消息。服务器可以设置 onHandShake 事件回调来手动处理 WebSocket 握手。

注意事项:

Swole _ Http _ server 是 swole _ Http _ server 的子类,内置了对 Http 的支持。swole _ WebSocket _ server 是 swole _ http _ server 的子类。在内置 WebSocket 的支持下,swoole_client 无法与 WebSocket 服务器直接通信。swoole_client 是一个 TCP 客户端,必须实现 WebSocket 协议才能与 WebSocket 服务进行通信。WebSocket 服务除了提供 WebSocket 功能外,其实还可以处理 Http 长连接。只需要 onRequest 事件监控就可以实现 Comet 方案的长 Http 轮询。

完整附件点此下载

Supongo que te gusta

Origin juejin.im/post/7147587120511582238
Recomendado
Clasificación