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.

domingo, 20 de septiembre de 2015

Buenos dias lectores del blog del programador, como dije en una entrada previa estoy volviendo a escribir, y el día de hoy voy a comenzar con una serie de entradas que tratan sobr egit, a modo "capacitación" luego de haber presentado todas las entradas voy a publicar los papers correspondientes.

Git es un sistema de control de código para ordenar las distintas versiones de un código en su desarrollo, fué diseñado para desarrollar Linux, y está enfocado al desarrollo organizado por parte de múltiples programadores.

En la introducción de git estaremos explicando cómo manejar un repositorio de forma unipersonal, luego en el paper de profundización de git, estaremos explicando las mecánicas de trabajo por parte de múltiples programadores.

Necesidades de un control de versiones

La pregunta que muchos se podrían hacer, y que van a descubrir su respuesta cuando comienzen a trabajar con git, es ¿por qué necesitamos un sistema de control de versiones?, el desarrollo de software como se dijo en varias ocaciones es una actividad intelectual en la que interactúan distintos componentes y faces, uno tiene una idea, la diseña, la programa, y luego la refina sucesivamente mejorando el código hasta crear una versión estable RC (Release Candidate), en cada fase podríamos pensar que el código está en una versión específica y a medida que avanza, también avanza sus versiones. Hay distintas formas de versionar los códigos, en general se usa el versionado separado por puntos (4.3.2) en general [Major].[Minor].[Micro] los numeros aumentan dependiendo de cuan grande sea los cambios desde la versión anterior hasta la actual. Generalmente para pequeños fixes y reparaciones se aumenta un digito de Micro, cuando son cambios relativamente grandes, cambios de funcionalidad, novedades, y atraviesan varias partes del código, se aumenta un digito al Minor, luego si hablamos de grandes cambios, (incluso cambios de estructura general), podemos aumentar un valor al Major, para organizar todas las versiones del código, es decir para poder controlar los cambios en qué archivos, en que version, y no mezclar todo existen los sistemas de control de versiones, tales como Git, Mercurial, etc.
Un sistema de control de versiones nos ayudará a tener el código ordenado y saber exactamente qué cambios hicimos, cuando los hicimos, como los hicimos y a qué archivos o partes del código afectaron.
Git particulamente es bastante interesantes, un proyecto libre, que tiene interesantes ventajas (que explicaremos más adelante, mientras tanto pueden buscarlas), asique es el que elegiremos para llevar a cabo esta capacitación.
Por otra parte Github es una página que provee de repositorios gratuitos donde subir tus códigos utilizando Git, sin embargo hay otras páginas como bitbucket que son pagas pero que te permiten tener repositorios privados para proyectos no opensource.

Recomendamos revisar GIT en wikipedia.

Un saludo para todos los lectores y espero sigan visitando el blog a la espera de nuevas entradas respecto a git, websocket, criterios de calidad, sistemas operativos, diseño, paradigmas, entre otros.

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!