Chat con SocketIO y Php

Chat con SocketIO y Php

Seguramente más de una vez te ha tocado tratar de implementar algo con SocketIO y Php, y el ejemplo más típico es un chat para manejar conversaciones entre distintos usuarios.

En esta entrada vamos a ver cómo podemos implementar SocketIO con php para realizar un sencillo chat utilizando walkor/phpsocket.io el cual está basado en walkor/Workerman.

¿Qué son los sockets?

Creo que quien mejor puede explicar qué son los sockets es la Wikipedia, aquí un adelanto.

Los sockets permiten implementar una arquitectura cliente-servidor. La comunicación debe ser iniciada por uno de los programas que se denomina programa “cliente”. El segundo programa espera a que otro inicie la comunicación, por este motivo se denomina programa “servidor”.

Un socket es un proceso o hilo existente en la máquina cliente y en la máquina servidor, que sirve en última instancia para que el programa servidor y el cliente lean y escriban la información. Esta información será la transmitida por las diferentes capas de red.

Las principales ventajas a la hora de trabajar con sockets es que nos permite de forma muy sencilla desarrollar aplicaciones en tiempo real entre todos los usuarios (sockets) que estén conectados a nuestra aplicación, nos aseguramos que todas las peticiones van a ser procesadas y que cada petición será procesada en el orden en que se han transmitido.

Los requerimientos para utilizar la librería Workerman son los siguientes.

  • PHP 5.3 o superior
  • Un sistema operativo compatible con POSIX (Linux, OS X, BSD)
  • Tener instaladas las extensiones POSIX y PCNTL para PHP
  • Composer (a efectos prácticos de este tutorial)

Desarrollar una aplicación con SocketIO y Php

Una vez estemos seguros de cumplir esos requerimientos podemos empezar a desarrollar nuestra aplicación, así que abre una terminal y ejecuta el siguiente comando dentro de tu proyecto para instalar la librería de SocketIO.

En este punto ya tenemos instalada la librería Workerman, así que vamos a definir la entrada de nuestra aplicación, la cual será un archivo index.html.

En ese trozo de html tenemos varias cosas, una zona para poder escribir y mostrar mensajes, una zona para mostrar a los usuarios conectados y un formulario para hacer login en la aplicación.

Algo importante es el final del archivo donde cargamos los archivos javascript necesarios, jQuery, SocketIO y el main.js, que será el código javascript que escribiremos (el cliente) para conectar con el servidor.

Definir la lógica del cliente con SocketIO

Ahora vamos a crear un archivo llamado main.js, éste será el que lleve la lógica del cliente para poder interactuar con el servidor.


En este punto tenemos que saber únicamente dos cosas, con socket.emit emitimos eventos al servidor y con socket.on recibimos eventos que el servidor ha emitido, nada más.

Si tienes dudas con el código jQuery recuerda que en cursosdesarrolloweb.es tienes un curso completo disponible.

Cómo puedes ver el código es claro y sencillo, simplemente accedemos a los eventos del DOM y emitimos y recibimos eventos con SocketIO.

Definir la lógica del servidor con SocketIO

Finalmente sólo nos queda escribir la lógica del servidor para que nuestros sockets puedan establecer comunicación de forma global, y eso lo conseguimos creando un archivo server.php con el siguiente código.

Primero hacemos un require del autoload.php para poder tener disponible todas las dependencias que hemos instalado con composer.

Después iniciamos la conexión de cada socket que ha entrado en nuestra aplicación con la siguiente línea.

A partir de ahí la librería SocketIO ya nos ofrece el socket actual y podemos identificarlo sin necesidad de hacer nada más.

Si tienes dudas con el código Php recuerda que en cursosdesarrolloweb.es tienes un curso completo disponible.

A partir de aquí sólo necesitamos saber 4 cosas.

  • Con $socket->on recibimos un evento lanzado desde el cliente.
  • Con $socket->emit emitimos un evento únicamente para el socket que lo ha ejecutado y será recibido en el cliente.
  • Con $socket->broadcast->emit emitimos un evento al cliente para todos los usuarios excepto para el que lo ha emitido y será recibido en el cliente.
  • Con Worker::runAll(); simplemente ejecutamos nuestra aplicación.

Llegados a este punto sólo te queda poder acceder al archivo index.html en tu servidor y ejecutar el siguiente comando para levantar tu aplicación de socket.

De esta forma tan sencilla podemos crear una aplicación de sockets utilizando SocketIO y php, espero que te haya parecido interesante este tema.

2 Comentarios

  1. Kamikaze
  2. israel965

Añade un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies
Descuentos de hasta el 50% por el Black Friday en CursosdesarrollowebAcceder ahora
+ +