Escribo un servidor y decido dividir el trabajo entre los diferentes procesos que ejecutan node.js, porque escuché que node.js tenía un único hilo y supuse que esto se paralizaría mejor. La aplicación va a ser un juego. Tengo un proceso que sirve páginas html, y luego otros procesos relacionados con la comunicación entre los clientes que juegan el juego. Los clientes se colocarán en "salas" y luego usarán sockets para comunicarse entre ellos a través del servidor. El problema que tengo es que el servidor html debe ser consciente de qué tan completas están las diferentes salas para ubicar a las personas correctamente. Los servidores de socket necesitan actualizar esta información para que se mantenga una representación precisa de las distintas salas. Entonces, hasta donde yo lo veo, el servidor html y los servidores de sala necesitan compartir algunos objetos en la memoria. Estoy planeando ejecutarlo en una máquina (multinúcleo). ¿Alguien sabe de una manera fácil de hacer esto? Cualquier ayuda sería muy apreciadacomunicación entre dos procesos que ejecutan node.js
Respuesta
Parece que no quiere hacer eso.
La publicación y el envío de mensajes están vinculados a IO, lo cual es muy bueno haciendo un nodo con un solo hilo. Si necesita cálculos prolongados sobre esos mensajes, podría ser bueno hacerlo por separado, pero aún así, es posible que se sorprenda de lo bien que lo hace con un solo hilo.
De lo contrario, consulte a los trabajadores.
El nodo actualmente no es compatible con la memoria compartida directamente, y eso es un reflejo de la completa falta de semántica de JavaScript o la compatibilidad con el manejo de la memoria compartida.
Con nodo de 0,7, sólo recientemente utilizable incluso de forma experimental, la capacidad de ejecutar múltiples bucles de eventos y contextos JS en un solo proceso se ha convertido en una realidad (utilizando el concepto de V8 de isolates
y grandes cambios a libuv para permitir que los bucles de eventos múltiples por proceso) En este caso, es posible, pero aún no es compatible directamente o es fácil, tener algún tipo de memoria compartida. Para hacer eso necesitarías usar un Buffer o ArrayBuffer (ambos representan un trozo de memoria fuera del montón de JavaScript pero accesible desde él de forma limitada) y luego una forma de compartir un puntero a la representación V8 subyacente de el objeto extraño Sé que se puede hacer desde un módulo de nodo nativo mínimo, pero no estoy seguro si aún es posible solo de JS.
Independientemente, el escenario que describió se cumple mejor simplemente usando child_process.fork
y enviando la cantidad (aparentemente mínima) de datos a través del canal de comunicación provisto (usa la serialización).
http://nodejs.org/docs/latest/api/child_processes.html
Editar: que sería posible a partir de JS solo suponiendo que utilizó nodo-fi para cerrar la brecha.
Puede intentar usar una base de datos como Redis para esto. Puede tener un proceso suscrito a un canal escuchando nuevas conexiones y publicación desde el servidor web cada vez que lo necesite. También puede tener múltiples procesos esperando a los usuarios y usar una lista y BRPOP
para suscribirse para esperar a los jugadores.
zeromq también se está volviendo muy popular como método de comunicación de procesos. Puede valer la pena mirar. http://www.zeromq.org/ y https://github.com/JustinTulloss/zeromq.node
- 1. Comunicación entre procesos en Lua
- 2. comunicación entre procesos en python
- 3. Recomendación de comunicación entre procesos
- 4. Comunicación entre procesos en .NET
- 5. C# - WCF - comunicación entre procesos
- 6. La comunicación entre dos procesos en heroku (qué puerto usar)
- 7. Comunicación entre procesos en c/C++
- 8. Ejemplos de comunicación entre procesos (IPC)
- 9. node.js - compartir sockets entre procesos
- 10. Comunicación entre dos hilos
- 11. ¿Diferencia entre procesos que se ejecutan en modo kernel y se ejecutan como raíz?
- 12. comunicación entre dos aplicaciones flexibles
- 13. comunicación android entre dos aplicaciones
- 14. Comunicación entre dos dispositivos iOS
- 15. Android: comunicación entre dos dispositivos
- 16. Node.js a la comunicación Node.js
- 17. ¿Cuál es el método más simple de comunicación entre procesos entre 2 procesos C#?
- 18. Boost :: asio, memoria compartida y comunicación entre procesos
- 19. comunicación entre procesos dentro de PHP con un proceso continuo?
- 20. comunicación entre procesos con resultados de memoria compartida copia cero?
- 21. Enhebrado, comunicación entre dos hilos C#
- 22. Android para comunicación node.js
- 23. Procesos programados que se ejecutan dos veces simultáneamente en Openbravo (usando Quartz)
- 24. Compartiendo un puerto entre múltiples procesos node.js HTTP
- 25. rendimiento entre diferentes procesos
- 26. depuración Node.js procesos con cluster.fork()
- 27. ¿Cómo sincronizo dos procesos?
- 28. comunicación entre servlets remotos
- 29. Comunicación entre aplicaciones Rails
- 30. ¿Cuál es la forma más fácil de hacer comunicación entre procesos en C#?
Pruebe esto, tal vez funcione para usted: [Fibras e hilos en node.js - ¿para qué?] (Http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads -in-node-js-what-for /) Supongo que hubo novedades desde que publicaste. – inf3rno