2011-01-13 33 views
5

Tôi đang làm việc trên một ứng dụng phân tán có hai thành phần. Một được viết bằng tiêu chuẩn C++ (không được quản lý C++ và chạy trên nền tảng Linux) và một được viết bằng C#. Cả hai đều đang giao tiếp thông qua một chiếc xe buýt thông báo.Phân loại/tuần tự hóa nhị phân trong C++ và C#

Tôi có một tình huống mà tôi cần phải vượt qua các đối tượng từ C++ đến ứng dụng C# và cho điều này tôi cần serialize những đối tượng trong C++ và de-serialize chúng trong C# (một cái gì đó như marshaling/un-marshaling trong .NET) . Tôi cần phải thực hiện serialization này trong nhị phân và không phải trong XML (do lý do hiệu suất).

Tôi đã sử dụng Boost.Serialization để thực hiện điều này khi cả hai đầu được triển khai trong C++ nhưng bây giờ tôi có ứng dụng .NET ở một đầu, Boost.Serialization không phải là giải pháp khả thi.

Tôi đang tìm một giải pháp cho phép tôi thực hiện (de) tuần tự hóa trên ranh giới C++ và .NET tức là, serial serial nhị phân chéo.

Tôi biết tôi có thể triển khai mã tuần tự (de) trong một tệp C++ và sử dụng P/Invoke trong ứng dụng .NET, nhưng tôi muốn giữ nó như một phương sách cuối cùng.

Ngoài ra, tôi muốn biết nếu tôi sử dụng một số tiêu chuẩn như gzip, điều đó có hiệu quả không? Có bất kỳ lựa chọn thay thế nào khác cho gzip không? Ưu/nhược điểm của chúng là gì?

Cảm ơn

+0

Đề xuất tốt nhất của tôi là KHÔNG làm điều đó. Sử dụng json, xml hoặc một cái gì đó khác để chuyển dữ liệu của bạn. Thực hiện rằng FIRST, nếu nó kết thúc quá chậm thì phân tích những gì đang mất thời gian ... – Cine

+1

Tôi bắt đầu với serialization XML và nó đã chứng minh chậm hơn so với serialization nhị phân (với cả hai đầu chạy một ứng dụng C++). Đây là lý do tôi chọn Boost.Serialization ở nơi đầu tiên. –

+0

Bạn đã xem xét việc phát triển một ứng dụng COM đơn giản, C++ và.NET hỗ trợ công nghệ COM theo như tôi biết. –

Trả lời

4

gzip sẽ không trực tiếp giúp đỡ với serialization - nó sẽ chỉ (cố gắng) co lại một dòng suối. Điều này có thể có thể trợ giúp hay không, tùy thuộc vào số lượng dữ liệu trùng lặp trong luồng. Đối với dữ liệu dày đặc với ít văn bản, tôi đã thấy gzip tăng kích thước của tải trọng.

Cá nhân tôi sẽ xem protocol buffers tại đây (nhưng tôi bị thiên vị, vì tôi là một trong những tác giả của số many extensions). Bạn thường (nhưng không phải lúc nào) xác định các thông điệp bằng ngôn ngữ cơ bản (tệp .proto) và chạy các công cụ ngôn ngữ cụ thể để tạo các lớp. Hiệu suất là rất tốt - tập trung vào NET nó có thể xa vượt quá serializers inbuilt (123)

+0

+1 để đề xuất PB –

5

Tôi muốn giới thiệu Protocol Buffers, là thư viện tuần tự hóa của Google. Nó có cả hai .Net, C++ và Java serializers. Hầu hết các triển khai cũng khá nhanh.

http://code.google.com/p/protobuf/

+0

Cảm ơn cho đề xuất. Tôi sẽ xem xét nó. –

3

Một khả năng khác sẽ là Thrift, nó có nhiều hơn backends và nếu cần thiết cung cấp một phần tốt của mã cần thiết cho giao tiếp mạng - trong trường hợp bạn muốn mở rộng quy mô.

Nếu bạn chỉ muốn tuần tự hóa đối tượng dễ dàng, tôi sẽ xem xét json.org Có rất nhiều triển khai C++/.NET xung quanh.

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