Aunque la arquitectura no tiene nada que ver, y el modelo funcional prácticamente está más de lado de Socket.io con respecto a la velocidad. Viene bien tener en cuenta los resultados que obtuve al escribir un pequeño script que testa el envío de un string al servidor y la respuesta del servidor con tal cadena.
Apache/php5 por puerto TCP 80 en petición AJAX mediante POST (y cabeceras estándar de petición y respuesta) tarda aproximadamente 4 segundos. Socket.io/NodeJS por puerto TCP 1026 sólo con módulo socket.io en emisión y recepción de datos mediante emisión y listener (emit y on) tarda 0,1 segundos.
La cantidad de datos transferida es "virtualmente" la misma, y el tiempo transcurrido es varias veces menor. Virtualmente significa que se omite el peso de las cabeceras, ya que teóricamente forma parte de la misma arquitectura, aunque se que esto pueda ser muy reprochable, ya que multiplica los datos enviados y recibidos.
Para los que les interese saber algo más, socket.io establece un sistema de websockets, que es un mecanismo de comunicación bidireccional por eventos. En este caso, la negociación se produce al principio (momento de la conexión inicial), donde se intercambian cabeceras y claves; si la operación concluyó con éxito, se produce un canal de transporte de datos; el socket envía heartbeats opcionalmente cada cierto tiempo para comprobar el estado del servidor y está en escucha para eventos. La comunicación se produce inicialmente por parte del cliente. Los datos se escriben a sockets, tanto al socket actual, como a un conjunto (rooms) o a todos los sockets existentes mediante broadcast.
El script lo escribí en 20 minutos así que si hay algún error, está en preaviso.
Eliminé el link porque inyectaron código y redirigía a una web maliciosa, pero subí el código por si a alguien le interesa probarlo.
- Test: http://pastebin.com/r8KXYs4a (sustituir suservidor por el servidor)
- post.php: http://pastebin.com/nLjWMrrj
- socket.js: http://pastebin.com/4zHEPT3v (archivo que será ejecutado con node)
Son dos bucles, el primero envía por POST datos al servidor y los recibe, a la recepción de la respuesta con number 99, se calcula el tiempo, se inicia otro bucle que emite los mismos datos, y al evento de recepción con number 99 se calcula el tiempo. Se muestran los resultados.