2011-11-08 35 views
15

Tôi hiện đang điều tra các cách cải thiện cơ chế tuần tự làm bằng tay mạng C++ hiện tại của chúng tôi duy trì giao thức nhị phân hiện có của chúng tôi. Cách tiếp cận đầu tiên được thực hiện là mã hóa nó bằng cách sử dụng Boost.Asio với Boost.Serialisation sử dụng tuần tự nhị phân. Dù sao đi nữa, nó hơi chậm hơn (10%) mà việc thực hiện thủ công hiện tại của chúng tôi. Bất cứ ai có kinh nghiệm thực tế _real_work_ về việc sử dụng protobuf google cùng với Boost.Asio?Boost.Asio với bộ đệm giao thức google

Tôi tìm kiếm google cho mẫu nhưng chỉ có thể đi lên với ví dụ này:

Boost Asio with google protocol buffers sample

Có ai đã làm điều này trong bất kỳ dự án thực tế? Tôi đã rất quan tâm đến con số hiệu suất vì điều này phải khá nhanh ...

+0

Bạn có thể đính kèm hình ảnh cho thấy con số này? –

+0

Xin lỗi tôi không thể tiết lộ nó: ( – jvaz

Trả lời

22

Chúng tôi sử dụng boost :: asio và Protobuf cho các giao thức tốc độ thư phức tạp và thấp. Đối với các giao thức tốc độ tin nhắn đơn giản, tốc độ cao, chúng tôi tăng cường :: asio và serialization tùy chỉnh.

Thư viện C++ Protobuf sử dụng std :: string để biểu diễn các trường chuỗi cho các thư mà nó deserializes, có nghĩa là phân bổ lưu trữ miễn phí được thực hiện bởi Protobuf cho mọi trường chuỗi trong mọi thư bạn nhận được. Điều đó làm cho Protobuf không thực sự thực hiện việc gửi tin nhắn tần số cao.

Tôi sẽ sử dụng Protobuf ở mọi nơi nếu có thể. Đó là một công cụ tuyệt vời để làm cho các giao thức tương thích phong phú, phức tạp, nền tảng độc lập, chuyển tiếp và tương thích ngược.

PHỤ LỤC

Kể từ khi nó có vẻ như mọi người đang đọc câu trả lời này, tôi nên chia sẻ mà tôi đã học được rằng trong C++ Protobuf bạn có thể tái sử dụng các đối tượng nhắn deserialization để giảm tần số malloc khi đọc .

Xem Mẹo Tối ưu hóa:

https://developers.google.com/protocol-buffers/docs/cpptutorial

+0

Cảm ơn James cho đầu vào của bạn, nhiều đánh giá cao :) – jvaz

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