2011-11-08 23 views
15

Şu anda mevcut ikili protokolümüzü koruyarak mevcut C++ ağ el yapımı serileştirme mekanizmamızı geliştirmenin yollarını araştırıyorum. İlk yaklaşım, Boost.Asio ile ikili seri hale getirme kullanarak Boost.Serialisation kullanarak kodlamaktı. Her neyse, mevcut el yapımı uygulamamızın biraz daha yavaş (% 10) olduğu ortaya çıktı. Google protobuf'u Boost.Asio ile birlikte kullanma konusunda gerçek bir _real_work_ deneyimi var mı? Boost.Asio, google protokol arabellekleriyle

Ben numuneler için google arandı ama sadece gel-up bu örnekle başardı:

Boost Asio with google protocol buffers sample

mu kimsenin herhangi bir fiili projede yaptı? Oldukça hızlı olması gerektiğinden, performans figürleri çok ilgimi çekiyor ...

+0

Eğer rakam gösteren resim eklemek miyim? –

+0

Üzgünüm, onu ifşa edemem :( – jvaz

cevap

22

Karmaşık, düşük mesaj oranı protokolleri için boost :: asio ve Protobuf kullanıyoruz. Basit, yüksek mesaj hızı protokolleri için, asio ve özel serileştirme işlemlerini destekliyoruz.

C++ Protobuf kitaplığı, std :: string öğesini, serileştirdiği iletilerin dize alanlarını temsil etmek için kullanır; bu da, aldığınız her iletideki her dize alanı için Protobuf tarafından bir ücretsiz depo ayırması gerçekleştirildiği anlamına gelir. Bu, Protobuf'u gerçekten yüksek frekanslı mesajlaşma için çok iyi değil kılar.

Eğer yapabilirsem Protobuf'u her yerde kullanırdım. Zengin, karmaşık, platformdan bağımsız, ileri ve geri uyumlu uyumlu protokoller oluşturmak için harika bir araçtır.

EK

kişi bu cevabı okuduğunuz gibi görünüyor beri, ben C++ Protobuf size tekrar kullanabileceği olabilir okurken seri kaldırma mesajı nesneleri malloc sıklığını azaltmak için öğrendim o paylaşmalıdır .

bakınız Optimizasyon İpuçları:

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

+0

Girdiğiniz için teşekkürler James, çok beğeni topladı :) – jvaz

İlgili konular