Merhaba Burak,

C++ ile geliştirimi olmadı sanırım, ama tasarım olarak rest.li'ye bir 
bakmanızda fayda var. 100+ mikroservis ve 400M+ kullanıcıya hizmet verilen bir 
ortamda haberleşen tarafların aynı dilden konuşması için başarıyla kullanılıyor.

https://github.com/linkedin/rest.li

Eğer C++ geliştirimi olmadıysa, güzel bir FOSS projesi bile çıkabilir :]

Kolay gelsin,
--eg

--
Erek Göktürk

> On Jan 23, 2017, at 10:12, Baskın Burak Şenbaşlar <[email protected]> wrote:
> 
> Merhaba arkadaşlar.
> 
> Bir proje üzerinde çalışıyoruz şu an. Projeyi C++ ile geliştiriyoruz.
> 
> Projede birden fazla server ve birden fazla da client bulunuyor. Clientlar 
> arası, serverlar arası ve client ile serverlar arası koordinasyon için bir 
> dolu kontrol mesajının akması gerekiyor.
> 
> Şu anda hızlı ilerleyebilmek amacıyla mesajları JSON ile göndermekte karar 
> kıldık. Sistemin geri kalanının JSON oluşturma içinde boğulmaması için 
> layering yapmaya karar verdik. Hem ilerde JSON yerine başka yapılara geçecek 
> olursak(protobuf xml vs.) var olanı değiştirmemiz daha kolay olacak.
> 
> Şöyle ki, mesajlarımızı temsil eden classlar var. Her mesaj header ve 
> payloaddan oluşuyor. Her mesaj classı bir header classını extend ediyor. Her 
> mesaj ya request ya response oluyor. Payloadla ilgili veriyi class'ın private 
> değişkenlerinde tutuyoruz. Bu class yapısı, mesajların JSON hali ile 
> uygulamanın geri kalanını birbirinden ayırıyor. Bir mesaj göndermek 
> istediğimizde classın private variablelarını JSON'a dönüştürüyoruz. Daha 
> sonra socket seviyesinde implement ettiğimiz başka bir protokol ile karşı 
> tarafa yolluyoruz bu JSON'ı.
> 
> Sorunumuz JSON'a dönüştürme aşamasında. Bir JSON verisi gönderirken her mesaj 
> için özel fonksiyon yazmaya başladık başta. 40-50 farklı mesaj tipi olduğu 
> için yönetilemez bir hal alacağı için başka yollar aramaya koyulduk. Bu gibi 
> durumlarda kullandığınız yöntemlerle ilgili bilgi verebilir misiniz?
> 
> Şöyle birşey yapmayı düşündük: Değişkenleri private olarak tutmak yerine bir 
> map'te key-value ikilileri olarak tutabiliriz. Değişkenlerin tiplerini 
> bilemeyeceğimiz için bu değişkenleri heap'ten alıp void*'a cast edip yanına 
> tipini string olarak iliştirebiliriz. Mesela "username" diye string bir 
> değişken olsun değeri de "baskin" olsun.
> 
> std::map<std::string, std::pair<void*, std::string> > variables;
> std::string* uname = new std::string("baskin");
> variables[std::string("uname")] = make_pair((void*)uname, 
> std::string("string"));
> 
> JSON'a çevirirken de bu değerin olduğu yer şu şekilde bir hal alsın dedik:
> 
> {
>   ...
>   "uname": {
>     "type": "string",
>     "value": "baskin"
>   }
>   ...
> }
> 
> Böylece receiver değerler ile ne yapması gerektiğini bilecek. (Ne tür 
> değişkene atması gerektiğini)
> 
> Bu metod sizce efektif bir metod mu? Bize hem JSON'ı gereksiz büyüttüğü hem 
> de C++ stilinden uzak olduğu için güzel gelmedi.
> 
> Daha güzel dizayn edilmiş bir metod biliyor musunuz acaba?
> 
> Şimdiden teşekkürler, iyi çalışmalar.
> 
> Dipnot: private değişkenlerimizin tipleri int, std::string, double, float, 
> std::vector<struct X> (struct X yerine bizim tanımladığımız 3 farklı struct 
> gelebilir)
> 
> -- 
> Baskın Burak Şenbaşlar
> Orta Doğu Teknik Üniversitesi
> Bilgisayar Mühendisliği #3
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php

_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap