2011-11-23 37 views
7

Tôi đang tìm một cách tốt để kết nối hai hệ thống: 1) một ứng dụng dựa trên Qt chạy trên Ubuntu và 2) một ứng dụng dựa trên Boost chạy trên một máy Ubuntu khác. Cả hai ứng dụng đều sử dụng một thư viện chung, nơi tôi sẽ đặt mã giao diện chung. Tôi muốn sử dụng giao diện kiểu RPC. Tôi đã xem CORBA và D-Bus nhưng tôi tự hỏi những gì người khác đã sử dụng hoặc sẽ giới thiệu.Qt và Boost RPC

Xin cảm ơn trước.

Trả lời

4

Apache Thrift là khung RPC đa ngôn ngữ ban đầu được phát triển bởi Facebook. Một nguyên mẫu tôi đã viết một thời gian trước đây sử dụng nó, tôi nghĩ rằng nó khá đơn giản để sử dụng (tôi không nhớ bất kỳ vấn đề). Nó sẽ là một lựa chọn tốt nếu sau này bạn có thể muốn mở rộng hệ thống với các thành phần được viết bằng các ngôn ngữ khác.

0

Công cụ truyền thông Internet (Băng) là Cơ chế RPC hiện đại và cập nhật hỗ trợ nhiều ngôn ngữ. Bạn có thể tải về nó here. Phần lớn các Ice API được định nghĩa trong Slice, đó là ngôn ngữ đặc tả cho Ice.

Slice (đặc tả ngôn ngữ cho băng) là cơ chế trừu tượng cơ bản để tách các giao diện đối tượng khỏi triển khai của chúng. Slice thiết lập một hợp đồng giữa máy khách và máy chủ mô tả các loại và giao diện đối tượng được ứng dụng sử dụng. Mô tả này độc lập với ngôn ngữ thực hiện, vì vậy không quan trọng liệu khách hàng có được viết bằng cùng ngôn ngữ với máy chủ hay không.

Định nghĩa slice được biên soạn cho một ngôn ngữ thực hiện cụ thể bởi trình biên dịch ví dụ cho C++.

Bạn cũng có thể sử dụng XML-RPC. Nó là một cơ chế RPC nhẹ và dễ sử dụng. Bạn có thể lấy nó here.

2

Bạn có thể xem xét ØMQ. Nó là một thư viện tin nhắn đa nền tảng, trong số rất nhiều thứ khác, "tự động" xử lý các vấn đề kết nối (bao gồm kết nối lại trong trường hợp thất bại). Có các ràng buộc bằng nhiều ngôn ngữ và thư viện czmq cung cấp giao diện C cấp cao đẹp cho nhiều ứng dụng phổ biến của ØMQ.

Bạn có thể dễ dàng sử dụng mẫu Yêu cầu trả lời cho khung RPC, nhưng khi đọc guide, bạn có thể thấy rằng các mẫu khác phù hợp hơn.

Tôi đã tìm thấy RPC framework được xây dựng trên đầu trang của ØMQ, nhưng vì bạn đang sử dụng C++, điều này có thể sẽ không giúp bạn (trừ mục đích học tập). Xem thêm this question. Bạn có thể khá dễ dàng cuộn của riêng bạn, nếu bạn muốn.

Giấy phép của ØMQ là "LGPLv3 +", về cơ bản là LGPL có ngoại lệ liên kết tĩnh. czmq đang chuyển sang MPLv2, vì vậy tôi sẽ không ngạc nhiên nếu ØMQ tuân theo sớm. Theo một thông điệp từ tác giả ØMQ, MPLv2 rất giống với giấy phép "LGPLv3 +", nhưng có thể chấp nhận được hơn đối với luật sư doanh nghiệp.

Bạn cũng có thể xem xét boost serialization cho mã giao diện của mình. Chúng tôi đã sử dụng czmq (bao gồm zbeacon cho khám phá nút tự động) cùng với việc tăng tuần tự hóa và nó hoạt động rất tốt. Tôi đã sử dụng XML-RPC trong quá khứ và tôi thích ØMQ cho chức năng xử lý kết nối mà nó cung cấp.