2009-07-30 33 views
6

Chúng tôi có một ứng dụng C++ trên Windows bắt đầu quá trình java. Hai ứng dụng này cần giao tiếp với nhau (thông qua đoạn trích xml).Interprocess Giao tiếp giữa ứng dụng C++ và Ứng dụng Java trong môi trường Windows OS

Bạn sẽ chọn phương thức liên lạc nội bộ nào và tại sao?

Phương pháp trên bàn cho chúng tôi là: tệp được chia sẻ, đường ống và ổ cắm (mặc dù tôi nghĩ rằng điều này có một số lo ngại về bảo mật). Tôi đang mở cho các phương pháp khác.

Trả lời

9

Tôi không chắc chắn lý do tại sao bạn cho rằng giao tiếp dựa trên socket sẽ có mối quan tâm về bảo mật (sử dụng SSL). Nó thường là một cách tiếp cận rất tốt vì nó là ngôn ngữ bất khả tri, giả định rằng bạn có một giao thức truyền thông được xác định rõ. Hãy xem ví dụ protocol buffers của Google - chúng tạo ra các lớp và luồng Java cần thiết. Theo kinh nghiệm của tôi, các hệ thống tệp (đặc biệt là các hệ thống tệp mạng) không phù hợp với giao tiếp như chúng không nhất thiết được điều chỉnh cho thông báo (Tôi đã gặp sự cố bộ nhớ đệm dẫn đến các tệp không được nhận bởi mục tiêu quá trình ví dụ).

Một lựa chọn khác là một nhắn lớp (AMQ hoặc Tibco ví dụ) mặc dù điều này có thể sẽ liên quan đến một chi phí lớn hơn hành chính (cộng với chuyên môn) để thiết lập.

Cá nhân tôi sẽ lựa chọn phương pháp tiếp cận thuần túy vì tính linh hoạt và đơn giản của nó. Bạn sẽ được kiểm soát hoàn toàn.

+0

Điểm của bạn được lấy về ổ cắm và bảo mật. Cảm ơn. +1 –

3

Tôi đã sử dụng tên ống để giao tiếp giữa C# và một cross-platform C++ ứng dụng và không có gì nhưng kết quả tốt. Chặn các ổ cắm đó chắc chắn là con đường để đi.

2

Ổ cắm đẹp. Chúng cung cấp cho bạn khả năng rất dễ dàng tạo ra một lớp thử nghiệm hộp đen xung quanh mỗi thành phần, cũng như chạy từng thành phần trên máy riêng của mình.

Bảo mật chắc chắn là mối quan tâm, nhưng có nhiều tùy chọn tốt tùy thuộc vào mức độ quan trọng của nó. Bạn có thể sử dụng SSL, bắt tay tùy chỉnh, đăng nhập được bảo vệ bằng mật khẩu và tường lửa để giúp bảo mật.

Chỉnh sửa: Không phải điều tôi muốn đề xuất, nhưng cũng có bộ nhớ dùng chung bằng JNI. Chỉ cần nghĩ rằng tôi muốn đề cập đến nó bởi vì nó không có trong danh sách của bạn.

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