tutorial socket node example node.js socket.io

node.js - node - socket io tutorial



Usando node.js y socket.io con la aplicaciĆ³n PHP (4)

Tengo una aplicación PHP que funciona. Permite al usuario crear proyectos privados e invitar a otros a participar. Ahora, usando node.js y socket.io, quiero hacer comentarios en tiempo real, publicaciones, etc.

¿Cuál es la mejor arquitectura?

Veo dos soluciones ahora.

El primero es:

  • El usuario envía la consulta AJAX al back-end PHP: http://example.com/comment_add.php?text= ...
  • comment_add.php agrega comentarios a la base de datos y a través de AMPQ (¿o algo mejor?) notifica al servidor node.js que transmite comentarios a los suscriptores del canal.

El segundo es:

  • El usuario envía una consulta AJAX al servidor node.js: http://example.com:3000/comment_add
  • Node.js envía una solicitud al back-end de PHP (¿Pero cómo y qué pasa con la autorización?), Recibe una respuesta y luego transmite a los suscriptores del canal.

¿Cuál es la mejor manera? ¿Hay otros métodos? ¿Cómo implementar esto correctamente?


Cuando decidiste usar node.js + socket.io para hacer una aplicación web en tiempo real, ya no necesitas pensar en PHP y olvidar Ajax también ... Socket.io será la comunicación entre el cliente y el servidor .

Pero sí, puedes usar Ajax y PHP para construir sitios web rápidamente, y algunas otras funciones que no necesitan en tiempo real


Finalmente mi solución de trabajo es # 1.

Cuando el usuario establece una conexión con node.js / socket.io, simplemente envía el mensaje ''subscribe'' a node.js con su ID de sesión de PHP. Node.js verifica la autorización utilizando la solicitud POST al back-end de PHP y, si todo está bien, permite al usuario establecer la conexión.

Frontend envía todas las solicitudes a PHP tal como estaban antes de node.js. PHP modifica algún objeto, comprueba quién puede acceder al objeto modificado y envía un mensaje (a través de AMQP o redis pub / sub, etc.) a node.js:

{ id_object: 125342, users: [5, 23, 9882] }

node.js luego verifica quién de los usuarios que figuran en la lista tienen conectores activos y para cada usuario envía una solicitud GET a PHP:

{ userId: 5, id_object: 125342 }

El controlador PHP especial que recibe esta solicitud ejecuta una consulta para obtener el objeto con derechos de identificación de usuario determinada y luego envía un mensaje a node.js con la respuesta resultante. Node.js luego a través de socket envía respuesta a la interfaz del usuario.


La segunda forma es el mejor método. Puede usar http para comunicarse con PHP desde node.js. La autorización se puede hacer en node.js pero pasando las credenciales de autenticación cada vez a PHP


Me enfrenté a esta misma pregunta hace un año cuando comencé mi proyecto de último año en la Universidad. Me di cuenta de que mi proyecto era mucho más adecuado para usar Node como una aplicación independiente. El nodo es muy bueno para tratar con E / S, esto puede ser cualquier cosa, desde una solicitud HTTP hasta una consulta de base de datos. Agregar un servidor web basado en PHP detrás del nodo agregará complejidad innecesaria. Si su aplicación necesita realizar tareas intensivas de CPU, puede fácilmente desarrollar fácilmente el nodo ''hijo'' procesado que realiza la operación necesaria, y devolver el resultado a su nodo padre.

Sin embargo, de los dos métodos que ha mencionado elegiría el # 2. Node.js puede comunicarse con su servidor PHP de varias maneras; podría considerar crear una conexión de socket unix entre su servidor PHP y Node. Si no está disponible, simplemente puede comunicarse entre Nodo y su back-end PHP mediante HTTP. :)

Eche un vistazo aquí, aquí hay una solución a una pregunta muy similar a la suya: http://forum.kohanaframework.org/discussion/comment/57607