2013-07-25 36 views
7

Hiện tại, tôi đang sử dụng EventEmitter2 làm một ứng dụng nhắn tin trong ứng dụng của mình và tôi thực sự thích nó.Trình phát sự kiện liên tiến trình cho Node.js?

Dù sao, bây giờ tôi cần một chiếc xe buýt thông báo không chỉ hoạt động trong quá trình mà còn liên tiến trình. ứng cử viên lý tưởng của tôi sẽ ...

  • ... được API tương thích để EventEmitter2 (gọi là "thả thay thế"),
  • ... công việc mà không có một máy chủ chuyên dụng hoặc dịch vụ bên ngoài (chẳng hạn như một cơ sở dữ liệu, một hàng đợi thông điệp, …), Chỉ sử dụng tài nguyên hệ điều hành,
  • … được viết bằng JavaScript thuần túy,
  • … chạy trong bộ nhớ, do đó, nó không đòi hỏi sự kiên trì.

Những gì tôi làm không cần:

  • Nó không cần phải chạy trên Windows, OS X và Linux cũng tốt.
  • Sẽ ổn nếu nó chỉ hoạt động trên một máy duy nhất, không cần phải biết mạng.

Bất kỳ ý tưởng hay gợi ý nào?

PS: Nếu bạn có thể giới thiệu một sản phẩm có sẵn, bạn có thể chỉ cho tôi biết hướng dẫn cách tự làm điều này bằng máy chủ.

Trả lời

11

Dưới đây là các tùy chọn của bạn khi tôi nhìn thấy chúng.

  1. process.fork/send. Nếu cả hai quy trình là nút, lõi nút cung cấp một cơ chế IPC theo hướng sự kiện đơn giản thông qua API này. Nó cặp với process.fork vì vậy nếu các quy trình của bạn là một nút dựa trên tổng thể và một số nút dựa trên nhân viên/hỗ trợ các quy trình con, process.send có thể là một lựa chọn khả thi. http://nodejs.org/docs/latest/api/all.html#all_child_process_fork_modulepath_args_options

    • dựa trên sự kiện, nhưng không EventEmitter2 thả trong
    • bi-directional
    • hiệu quả
    • sử dụng tài nguyên hệ điều hành chỉ
    • trong bộ nhớ
    • javascript
  2. Sử dụng mạng TCP của nút lõi để kết nối qua miền unix ổ cắm. http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    • vẫn sự kiện dựa nhưng dòng dữ liệu thô như trái ngược với thông điệp cấp cao
    • bi-directional
    • trong bộ nhớ
    • javascript
  3. Tốt cũ TCP.

    • vẫn sự kiện dựa nhưng dòng dữ liệu thô như trái ngược với thông điệp cấp cao
    • bi-directional
    • trong bộ nhớ
    • javascript
  4. node-to-nút socket.io

    • dựa trên sự kiện, nhưng không phải EventEmitter2 thả trong
    • bi-directional
    • trong bộ nhớ
    • javascript

Trong mọi trường hợp bạn nhận được hai chiều giao tiếp một lần kết nối, nhưng luôn luôn có khái niệm về các đồng đẳng đầu tiên (máy chủ trong TCP hoặc socket.io, quá trình cha mẹ trong process.fork) và peer thứ hai (client trong TCP hoặc socket.io, tiến trình con trong process.fork).

+0

Vâng, tôi đã làm. Nhưng các ứng dụng hoàn toàn không liên quan đến nhau, do đó tôi không thể đảm bảo rằng chúng là nhánh. –

+0

Xem cập nhật của tôi. Có lẽ socket.io? –

+0

Có lẽ tôi không hiểu - có nghĩa là tôi cần một máy chủ Socket.io ở đâu đó? Hoặc là một bên ngoài, hoặc mỗi khách hàng cần phải có một bao gồm? AFAIK không có "peer to peer" Socket.io, phải không? –