Si en algo hace agua PHP es en proporcionar un canal de comunicación bidireccional entre el servidor web y el navegador del cliente. Aunque si vamos al caso, el lenguaje no fue creado con esa intención, por lo que las culpas son muy relativas, en cambio herramientas como Node.js hacen un excelente trabajo en estos menesteres.
Sin embargo puede ocurrir que toda nuestra aplicación este escrita en PHP, y por una cuestión practica no deseemos utilizar otra tecnología, para estos casos Ratchet es una excelente alternativa.
Ratchet es un conjunto de bibliotecas escritas en PHP para la creación de canales bidireccionales entre el cliente y el servidor utilizando websockets.
No hay que confundir websockets con soluciones similares, pero distintas al fin y al cabo, como por ejemplo comet o reverse ajax. En particular me gusta mucho la idea de utilizar websockets, son una solución mucho más limpia, y algo que se afianzará completamente con el paso del tiempo gracias a la adopción de la tecnología por la mayoría de los navegadores modernos.
Ejemplo de WebSockets con PHP
<?php use Ratchet\Server\IoServer; use Ratchet\WebSocket\WsServer; use MyApp\Chat; $server = IoServer::factory( new WsServer( new Chat() ) , 8000 ); $server->run(); ?>
JavaScript:
var conn = new WebSocket('ws://localhost:8000'); conn.onmessage = function(e) { console.log(e.data); }; // Later, at your leisure: conn.send('Hello World!');
Como se puede ver en el ejemplo crear un socket por el cual la aplicación se comunica con el servidor es muy sencillo, bastante más que las soluciones que probé que se basadas en Comet. El resto es estudiar la documentación y hacer pruebas de rendimiento.
En el sitio oficial del proyecto van a encontrar muchos más datos sobre como implementar esta fantástica biblioteca que PHP venia necesitando hace tiempo 😀
Web: Ratchet
Javier
12 años ago
La ultima parte del code está mal (debajo de $server->run();).. Sería aparte ya que es javascript.
No le veo utilidad a usar sockets con php.. nodejs es la solucion ideal… mucho mas madura y potente.
Pablo
12 años ago
Gracias! Ahi lo corrijo, se me mezclo cuando estaba editando! 😀
A mi me gusta de cara a no mezclar tecnologias, pero si, Node.js es muchisimo más potente para este tipo de soluciones.
Lo mejor de la semana sobre desarrollo web en español vol. 7 | ADWE
12 años ago
[…] WebSockets para PHP […]
Brendon Bitter
11 años ago
Gracias por el ejemplo. No está demás echar un vistazo en http://socketo.me/docs/hello-world, que es lo mismo pero paso a paso, con la clase Chat implementada, includes puestos, etc, etc.
¿No ves la utilidad a usar sockets con php Javier? Ya, pero el artículo es «Websockets con PHP». Si tienes un desarrollo en PHP (muchos, muchos CMS están en PHP, pese a quien pese) y quieres integrar un chat por ejemplo, quizá no sea necesario que te montes node.js sólo para gestionar esta simpleza. Claro que node.js, ruby, etc, está super de moda, es de gente «cool», etc, pero a veces se cuentan con unos recursos a partir de los que hay que obtener soluciones en la medida de lo posible. Cuando el cliente me diga que tiene un servidor dedicado y me deje montar lo que me plazca, pues perfecto, barra libre, le montamos la NASA.
Por otro lado, websockets en hostings compartidos no suelen funcionar: hay limitaciones con el uso de los puertos, impresindible para trabajar con sockets, y muchas veces limitaciones a la hora de ejecutar comandos por shell, con exec, etc…
Un saludo