Quiero programar un HTTP WebChat utilizando solicitudes HTTP de larga duración (Comet), ajax y websockets (dependiendo del navegador utilizado). Userdatabase está en mysql. El chat está escrito en PHP, excepto tal vez la secuencia de chat, que también podría escribirse en javascript (node.js):PHP Socket Server vs node.js: Web Chat
No quiero iniciar un proceso de php por usuario ya que no hay una buena manera de enviar el chat mensajes entre estos niños php. Así que pensé en escribir un servidor socket propio en PHP o node.js que debería poder manejar más de 1000 conexiones (usuarios de chat). Como desarrollador puramente web (php) no estoy muy familiarizado con los sockets, ya que generalmente dejo que el servidor web se preocupe por las conexiones. Los mensajes de chat no se guardarán en el disco ni en mysql, sino en la RAM como una matriz u objeto para obtener la mejor velocidad.
Hasta donde yo sé, no hay manera de manejar múltiples conexiones al mismo tiempo en un solo proceso php (servidor de socket), sin embargo, puede aceptar una gran cantidad de conexiones de socket y procesarlas sucesivamente en un bucle (leer y escribir; mensaje entrante -> escribir en todas las conexiones de socket). El problema es que lo más probable es que haya un desfase con ~ 1000 usuarios y las operaciones de mysql podrían ralentizar todo, lo que afectará a todos los usuarios.
Mi pregunta es: ¿Puede node.js manejar un servidor de socket con un mejor rendimiento? Node.js está basado en eventos, pero no estoy seguro de si puede procesar múltiples eventos al mismo tiempo (¿no sería necesario un multihilo?) O si solo hay una cola de eventos. Con una cola de eventos sería como php: procesar usuario tras usuario.
También podría engendrar un proceso de php por sala de chat (mucho menos usuarios) pero afaik hay servidores de IRC únicos que también pueden manejar miles de usuarios. (escrito en C++ o lo que sea) así que tal vez también es posible en php.
Preferiría PHP sobre Node.js porque entonces el proyecto sería php-only y no una mezcla de lenguajes de programación. Sin embargo, si Node puede procesar conexiones simultáneamente, probablemente lo elegiría.
Gracias por el código. Escribí más o menos lo mismo la semana pasada en PHP (incluso el nombre! == '' parte es idéntica), así que ahora comprobaré si está en PHP tan rápido como en node.js, así que no necesito molestarme con dos idiomas aunque node.js es agradable y fácil ya que lo utilicé para las secuencias de comandos del lado del cliente desde hace años (jquery, etc.). – Eliasdx
@Eliasdx ¿tiene cada referencia node.js vs php? Tengo curiosidad de cuáles podrían ser los resultados. – William
@Eliasdx ¿Alguna noticia sobre esto? Estoy buscando crear una conversación yo mismo y estoy muy interesado en conocer sus hallazgos. Personalmente estoy más metido en PHP. –