2013-07-25 16 views
7

Momentan verwende ich EventEmitter2 als einen Nachrichtenbus innerhalb meiner Anwendung, und ich mag es wirklich.Interprozess-Event-Emitter für Node.js?

Wie auch immer, jetzt brauche ich einen Nachrichtenbus, der nicht nur in-process arbeitet, sondern auch interprozessual. Mein idealer Kandidat würde ...

  • ... sein API-kompatibel zu EventEmitter2 (eine "Drop-in-Ersatz"),
  • ... Arbeit ohne einen dedizierten Server oder externen Service (wie zB eine Datenbank, eine Nachrichtenwarteschlange, ...), nur mit Betriebssystem-Ressourcen,
  • ... in reinem JavaScript geschrieben werden,
  • ... in-Speicher ausführen, so dass es keine Persistenz erfordert.

Was ich tun nicht Notwendigkeit:

  • Es muss nicht auf Windows, OS X und Linux laufen sind in Ordnung.
  • Es ist in Ordnung, wenn es nur auf einer einzigen Maschine funktioniert, muss es nicht Netzwerk-bewusst sein.

Irgendwelche Ideen oder Hinweise?

PS: Es ist in Ordnung, wenn Sie ein verfügbares Produkt empfehlen können, aber es ist auch in Ordnung, wenn Sie mir in eine Richtung zeigen können, wie ich die serverlose Sache selbst machen kann.

Antwort

11

Hier sind Ihre Optionen, wie ich sie sehe.

  1. process.fork/ senden. Wenn beide Prozesse Knoten sind, stellt der Knotenkern über diese API einen einfachen, ereignisgesteuerten IPC-Mechanismus bereit. Es wird mit process.fork gepaart. Wenn Ihre Prozesse ein node-basierter Master und mehrere node-basierte Worker/support-Subprozesse sind, kann process.send eine praktikable Alternative sein. http://nodejs.org/docs/latest/api/all.html#all_child_process_fork_modulepath_args_options

    • ereignisbasierte, aber nicht EventEmitter2 Drop-in
    • bidirektionaler
    • effiziente
    • verwendet nur OS Ressourcen
    • in-memory
    • Javascript
  2. Verwenden Sie das TCP-Netzwerk des Knotenkerns, um eine Verbindung über eine Unix-Domäne herzustellen Steckdose. http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    • noch Ereignis basiert, sondern Rohdatenstrom im Gegensatz zu High-Level-Nachrichten
    • bidirektionale
    • in-memory
    • Javascript
  3. gute alte TCP.

    • noch Ereignis basiert, sondern Rohdatenstrom, um Nachrichten auf hoher Ebene im Gegensatz
    • bidirektionaler
    • in-memory
    • JavaScript
  4. Knoten-zu-Knoten socket.io

    • ereignisbasiert, aber nicht EventEmitter2 Drop-in
    • bidirektionaler
    • in-memory
    • Javascript

In allen Fällen erhalten Sie die bidirektionale Kommunikation einmal verbunden, aber es ist immer das Konzept der ersten Peer (Server in TCP oder socket.io, übergeordneter Prozess in process.fork) und zweiter Peer (Client in TCP oder socket.io, untergeordneter Prozess in process.fork).

+0

Ja, tat ich. Aber die Anwendungen sind völlig unabhängig voneinander, daher kann ich nicht garantieren, dass es sich um Gabeln handelt. –

+0

Siehe mein Update. Vielleicht socket.io? –

+0

Vielleicht verstehe ich es nicht - bedeutet das nicht, dass ich irgendwo einen Socket.io Server brauche? Entweder ein externer oder jeder Kunde muss einen enthalten? AFAIK gibt es kein "Peer to Peer" Socket.io, oder? –