2012-03-23 32 views
12

Giả sử tôi có một chương trình C++ chạy trên cùng một máy chủ với máy chủ web bởi Node.js.Nodej có giao tiếp với chương trình C++ không?

Chương trình Cpp duy trì một hàng đợi, những gì tôi muốn làm với Node.js là, kéo một số dữ liệu vào hàng đợi.

Cách tốt nhất để làm điều này là gì?

Điều nào tốt hơn? ổ cắm hoặc IPC?

(os là linux)

+0

Chúng tôi đã sử dụng 'dbus' để giao tiếp giữa C++ và nodej trên hệ thống nhúng của chúng tôi. DBUS là một bus mặc định trên các hệ thống linux. –

Trả lời

10

Nếu bạn đang sử dụng Linux, tôi sẽ đề nghị UNIX-domain sockets. Về cơ bản, chúng cung cấp cho bạn hiệu suất cao của IPC bằng cách sử dụng giao diện socket BSD, giúp dễ dàng chuyển sang các cổng TCP sau này nếu bạn cần di chuyển ứng dụng C++ (hoặc node.js) sang một máy tính khác.

Chúng là already supported by node.js và chỉ có mã mở ổ cắm mới cần phải được thay đổi. Nhiều ứng dụng, bao gồm MySQL dễ dàng trừu tượng hóa điều này trong tệp cấu hình.

1

Tôi muốn sử dụng ổ cắm, họ được sạch sẽ và dễ dàng để sử dụng

+0

nhưng thực ra chúng nằm trên cùng một máy chủ, tôi tự hỏi rằng socket có thể chậm hơn các thứ IPC, tôi có đúng không? –

+0

nó chắc chắn là chậm hơn nhưng nó sẽ chuẩn bị ứng dụng của bạn để mở rộng quy mô nếu một ngày nào đó hai sẽ không cư trú nữa trên cùng một máy chủ. – luke14free

+0

@ luke14free: điều đó phụ thuộc. Các ổ cắm Unix có thể nhanh hơn các ổ cắm TCP thông thường. –

1

Nếu bạn muốn sử dụng cơ chế IPC, bạn có thể xem xét viết Node.js C++ module và sau đó sử dụng một cái gì đó từ thư viện Boost.Interprocess để giao tiếp với ứng dụng khác của bạn.

Boost.Interprocess có các cơ chế đã được tạo để chia sẻ vùng chứa từ thư viện chuẩn. Nó cũng là nền tảng chéo nếu bạn muốn mở cửa cho điều đó trong tương lai.

Các vấn đề liên quan