Me gustaría preguntar cuál es el flujo de trabajo del socket PHP.
PHP utiliza la biblioteca de sockets de Berkley para crear sus conexiones. Puedes saber que el socket es solo una estructura de datos. Utilice esta estructura de datos de socket para iniciar una sesión entre el cliente y el servidor. Este servidor siempre está escuchando y preparándose para generar una nueva sesión. Cuando un cliente se conecta al servidor, abre un puerto en el que el servidor está escuchando una sesión. En este momento, el servidor acepta la solicitud de conexión del cliente y luego realiza un ciclo. Ahora el cliente puede enviar información al servidor y el servidor puede enviar información al cliente.
Para generar un Socket, necesitas tres variables: un protocolo, un tipo de socket y un tipo de protocolo público. Hay tres protocolos para elegir al generar un socket. Continúe leyendo a continuación para obtener contenido detallado del protocolo.
Definir un tipo de protocolo público es un elemento esencial para la conexión. En la siguiente tabla echamos un vistazo a los tipos de protocolos públicos.
Tabla 1: Protocolo
Nombre/descripción de la constante
AF_INET Son la mayoría de los protocolos utilizados para generar sockets, utilizando TCP o UDP para la transmisión.
AF_INET6 es similar al anterior, pero se usa para direcciones IPv6
Protocolo local AF_UNIX, usado en sistemas Unix y Linux, rara vez se usa, generalmente se usa cuando el cliente y el servidor está en la misma máquina
Tabla 2: Tipo de socket
Nombre/descripción constante
SOCK_STREAM Este protocolo está en secuencia Un flujo de bytes confiable e integrado en datos -conexión basada. Este es el tipo de socket más utilizado. Este socket utiliza TCP para la transmisión.
SOCK_DGRAM Este protocolo es una llamada de transferencia de longitud fija y sin conexión. Este protocolo no es confiable y utiliza UDP para sus conexiones.
SOCK_SEQPACKET Este protocolo es una conexión confiable de doble línea que envía paquetes de datos de longitud fija para su transmisión. Este paquete debe aceptarse por completo antes de poder leerlo.
SOCK_RAW Este tipo de socket proporciona acceso único a la red. Este tipo de socket utiliza el protocolo público ICMP. (ping y traceroute usan este protocolo)
SOCK_RDM Este tipo rara vez se usa y no está implementado en la mayoría de los sistemas operativos. Se proporciona para que lo utilice la capa de enlace de datos y no garantiza el orden de los paquetes de datos.
Tabla 3: Protocolo público ***
Nombre/Descripción constante
Protocolo de mensajes de control de Internet ICMP, utilizado principalmente en puertas de enlace y hosts para verificar el estado de la red y informar mensajes de error
Protocolo de datagramas de usuario UDP, que es un protocolo de transmisión no confiable y sin conexión
Protocolo de control de transmisión TCP, que es el protocolo de transmisión confiable más utilizado Un protocolo público que garantiza que Los paquetes de datos pueden llegar al destinatario. Si se produce un error durante la transmisión, reenviará el paquete de error.
Ahora que conoces los tres elementos que generan un socket, usamos la función socket_create() en PHP para generar un socket. Esta función socket_create() requiere tres parámetros: un protocolo, un tipo de socket y un protocolo público. La función socket_create() devuelve un tipo de recurso que contiene el socket si tiene éxito, o false si falla.
Resource socket_create(int protocol, int socketType, int commonProtocol);
Ahora generas un socket, ¿y luego qué? PHP proporciona varias funciones para manipular sockets. Puede vincular un socket a una IP, escuchar la comunicación de un socket y aceptar un socket. Ahora veamos un ejemplo para comprender cómo la función genera, acepta y escucha un socket.
lt;?php
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); p>
p>
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
// Más funciones de socket por venir gt ;
El ejemplo anterior genera su propio servidor. La primera línea del ejemplo,
$commonProtocol = getprotobyname("tcp");
Utilice el nombre del protocolo público para obtener un tipo de protocolo. Aquí se utiliza el protocolo público TCP. Si desea utilizar el protocolo UDP o ICMP, debe cambiar los parámetros de la función getprotobyname() a "udp" o "icmp". Una alternativa es no utilizar la función getprotobyname() sino especificar SOL_TCP o SOL_UDP en la función socket_create().
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
La segunda línea del ejemplo genera un socket y devuelve una instancia del recurso de socket. Una vez que tenga una instancia del recurso de socket, debe vincular el socket a una dirección IP y un puerto.