Mostrando entradas con la etiqueta websockets. Mostrar todas las entradas
Mostrando entradas con la etiqueta websockets. Mostrar todas las entradas

domingo, 27 de septiembre de 2015

En esta entrada hablaremos sobre como manejar websockets desde php utilizando PHPSocketMaster, una librería que permite manejar tanto sockets como websockets. También explicaremos un poco como utilizar sockets comunes.


Los sockets son mecanismos de conexión y comunicación entre dos pc, todos los lenguajes de programación que conozco tienen algún tipo de soporte para manejar sockets. Los sockets trabajan con la metodología Cliente-Servidor, es decir uno de los sockets se conecta a otro (el cliente) y el otro socket recibe la conexión (El que sirve o servidor), generalmente el segundo tiene la facultad de aceptar más de una conexión, trabaja aceptando la conexión entrante y derivandola a un segundo socket que mantenga la conexion, reciba los mensajes, y responda, liberando el primero para aceptar nuevas conexiones y deribarlas a otros.

PHPSocketMaster es una librería de autoría propia que permite trabajar con sockets en php, tanto websockets como comunes, es decir mi librería permite conectarse a un programa hecho en otro lenguaje, o aceptar conexiones de otros programas o desde un websocket.

¿Cual es la diferencia entre un socket común y un websocket?, los websockets en realidad son sockets comunes que incluyen un protocolo de encriptación y handshake (es decir que todos los mensajes van encriptados y recorren un protocolo particular llamado websocket).

Aquí está el repositorio de la librería con la última versión estable.

La documentación, es muy extensa y explica bien como utilizar cada parte. (50% ingles, español completo).

Un socket puede estar en dos modos, como cliente para conectarse a otra pc, o como servidor a la escucha de conexiones de otra pc (es decir esperando que otra pc se conecte).

Si nosotros queremos crear un cliente es muy sencillo, incluimos la librería, y extendemos el PHPSocketMaster, aquí esta la documentacion y además hay ejemplos en la carpeta examples.

En terminos generales lo que hacemos es extender la clase principal creando una clase nueva que va a ser nuestro sockets, al estar orientado a eventos, nosotros tenemos que escribir las funciones de eventos en nuestra clase, y poner lo que hará nuestro codigo cuando ocurra cada uno de los eventos.
La lista de eventos se puede ver aquí. Dentro de nuestra clase escribimos lo que hará nuestro cliente al conectarse a algo.

Generalmente podemos conectarlo a servidores de distintas cosas, siempre que tengamos el protocolo correspondiente podemos conectarlo a un chat irc, o hacer una petición HTTP, incluso podemos conectarlo a los servidores de whatsapp (si conseguimos su protocolo).
Lamentablemente, PHPSocketMaster no soporta crear un cliente websocket (es decir no podemos hacernos pasar por un cliente web).

Luego si nosotros queremos crear un servidor es muy simple, hay que extender dos clases, la primera es la del socket que recibe las conexiones, como expliqué antes, este recibirá las conexiones entrantes y las derivará a socokets secundarios. Luego debemos extender la clase de los sockets que recibirán cada conexion, donde pondremos que pasará con cada uno de ellos.
Aquí está la documentación, y también hay ejemplos en la carpeta examples.

Para finalizar si quiciesemos crear un servidor que hacepte websockets, es mucho más sencillo, al servidor normal solo hay que agregarle una constante, y listo.
Aquí está la documentación.

Para simplificar las cosas cuando se trata de servidores, se me ocurrió crear una clase que se encarge de gestionar y controlar los sockets, porque el mayor problema en los servidores es poder organizar y controlar todos los sockets. Puedes ver el repositorio de esta librería aquí, también tiene ejemplos y requiere que se incluya PHPSocketMaster.

Si quieres saber qué se podría hacer con websockets para tener una idea, se puede crear un cliente de pocker multijugador en tiempo real, como éste, o crear un servidor de chat como aremos en esta serie de entradas, incluso podemos crear un servidor web como apache en php tranquilamente, o un servidor de XMPP, o cualquier otra cosa que utilice sockets, que a fin de cuentas es casi todo.

Saludos para todos! espero les haya gustado y estén atentos a nuevas entradas donde publicaremos como utilizar los sockets desde javascript para conectarnos a un server en php, y luego desarrollaremos un proyecto ejemplo donde crearemos un servidor de chat.

jueves, 17 de septiembre de 2015


Hace ya tiempo que no creaba una entrada, pero decidí volver a darle un poquito de énfasis a mi blog, y de paso explicar un poco de las tecnologías que estoy utilizando hoy en día.

En esta entrada haremos una breve introducción a websockets, para luego crear una serie de entradas a modo "manual" del usuario de websockets.

Internet con el paso del tiempo fué avanzando en lo que es tecnología y fué implementando nuevas herramientas, una de las cosas que se enseñan de entrada cuando uno aprende a desarrollar web, es que el protocolo por el que se rigen los servidores web es HTTP y es un protocolo sin estado, ¿Qué quiere decir?, en términos simples podemos creer que nos está diciendo que http no se mantiene en el tiempo y no tiene un estado que varía en el mismo, HTTP es un protocolo simple donde con una cabecera se exige un recurso, el servidor procesa el recurso y lo entrega dando por finalizada la conexión, es decir, no se mantiene nada en ejecución ni nada por el estilo.

Subscribete al RSS Follow me on Twitter!