Yardım Protobuf nedir?

  • Konuyu açan Konuyu açan Happy Way
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 10
  • Gösterim Gösterim 229
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Happy Way

MT Üye
MT Üye
Mesaj
263
Çözümler
25
Beğeni
99
Puan
749
Ticaret Puanı
0
Aeldra'nın filesini incelerken içerisinde protobuf diye bir olay gördüm ve bunu internet üzerinde bi kaç araştırma yaptım ve anladığım kadarıyla google'nın bir packet gönderme sistemi olduğunu hızlı bir yapı olduğunu öğrendim.

Bunu metin2'ye uyarlamışlar ve paket hatalarını en aza indirgemişler bu sistemi kendi dosyalarıma nasıl entegre edebilirim daha önce kullanan oldu mu yardımcı olabilir misiniz ve avantajları ve dezavantajları nelerdir?
 
Protobuff google tarafından geliştirilmiş, yapılandırılmış verileri serileştirmek ve iletmek için kullanılan bir protokol. Metin2de bir nevi paket boyutunu düşürerek ağ trafiğini azaltır ve geniş bant sağlar. Ayrıca .proto dosyasını program kendisi oluşturduğu için paket hatasını azaltır. Fakat bunu yapabilmen için bütün paket bilgilerine sahip olman gerekir yoksa hataları çözmek zor olur. Bunu yapmadan önce protobuff ile ilgili tutorial videoları izlersen rahatça uyarlayabilirsin. Ayrıca source içindeki protobuffa ait cpp ve .h dosyaları elle yazılmıyor onu protobuff kendisi üretiyor. senin yapman gereken tek şey protobuffa hangi paketlerin iletileceğini belirlemek. Aeldra filesi içerisinde protobuffı masaüstüne alıp inceleyebilirsin. Gördüğün üzere paketlerdeki ve item dataları filan bu şekilde ayarlanıyor

Kod:
message TItemPos {
  uint32 window_type = 1;
  uint32 cell = 2;
}
 
Son düzenleme:
Protobuff google tarafından geliştirilmiş, yapılandırılmış verileri serileştirmek ve iletmek için kullanılan bir protokol. Metin2de bir nevi paket boyutunu düşürerek ağ trafiğini azaltır ve geniş bant sağlar. Ayrıca .proto dosyasını program kendisi oluşturduğu için paket hatasını azaltır. Fakat bunu yapabilmen için bütün paket bilgilerine sahip olman gerekir yoksa hataları çözmek zor olur. Bunu yapmadan önce protobuff ile ilgili tutorial videoları izlersen rahatça uyarlayabilirsin
teşekkürler yapay zeka
 
Bu protobuffu tam olarak nasıl kullanabilirim tam anlamış değilim açıkcası


Yapay zekaya biraz danıştım az çok oturdu kafamda fakat bir örnek olsa daha güzel olurdu

şimdi bu sistemi entegre işleminde nasıl bir yol izlemeliyim 1 adet paketi buraya aktarabilsem diğer paketleri uyarlarım.

Aeldranın yapısına biraz baktım cg ve gc olarak ayırmış paketleri ve oyundaki verileri (player,pet,item,vb) bir kategori yapmış ayrı tutmuş
bende aynı tarz yapmak istiyorum aslında ve bu işlemi herkesin yapması gerektiğini düşünüyorum artık eski packet yapısını değiştirmemiz gerektiğini düşünüyorum
Yardımlarınızı bekliyorum bu işlemi gerçekleştirip foruma kazandırmamız lazım bence
 
Son düzenleme:
Bu protobuffu tam olarak nasıl kullanabilirim tam anlamış değilim açıkcası


Yapay zekaya biraz danıştım az çok oturdu kafamda fakat bir örnek olsa daha güzel olurdu

şimdi bu sistemi entegre işleminde nasıl bir yol izlemeliyim 1 adet paketi buraya aktarabilsem diğer paketleri uyarlarım.

Aeldranın yapısına biraz baktım cg ve gc olarak ayırmış paketleri ve oyundaki verileri (player,pet,item,vb) bir kategori yapmış ayrı tutmuş
bende aynı tarz yapmak istiyorum aslında ve bu işlemi herkesin yapması gerektiğini düşünüyorum artık eski packet yapısını değiştirmemiz gerektiğini düşünüyorum
Yardımlarınızı bekliyorum bu işlemi gerçekleştirip foruma kazandırmamız lazım bence
bunu incelemeni öneririm durum hakkında bilgi edinmeni sağlayacaktır. Ayrıca Aeldra'nın src dosyasında skill.cpp 157. satırda kullanımla ilgili şeyleri göreceksin
Kod:
bool CSkillManager::Initialize(const ::google::protobuf::RepeatedPtrField<network::TSkillTable>& table)
kaynak kodları içerisinde protobuf olarak aratırsan hangi yerlere eklendiğini bulabilirsin. Sana fikir olması açısından bunları önerebilirim
 
Aeldra protobuf yapısını inceledim baya bi üstünden geçtim.
Protobuf klasörü içerisinde Client <-> Game-Server - Game-Server <-> Game-Server - Game-Server <-> DB-Server şeklinde 3 farklı yapı olduğu için her bir işlem grubu için bir .hproto dosyası oluşturmuş ve bunların içerisine yukarıdaki yapıya uygun şekilde paket isimlerini tutmuş.
Paket için gerekli olan isim kısımlarını burada tutmuş örnek :Client > Game-Server için şu şekilde HANDSHAKE => (burası dahil ettiği dosya ismi kısaltmış)cgps.CGHandshakePacket buradaki CGHandshakePacket ismini de cgps olarak adlandırdığı dosyadan çektirmiş orada ise şu şekilde tanımlanmış :
Kod:
message CGHandshakePacket {
  uint32 handshake = 1;
  uint32 time = 2;
  sint32 delta = 3;
  bytes crypt_data = 4;
}

Geri kalan dosyaları protobuf kendisi oluşturuyor zaten packet sisteminde ki hatayı azaltan kısım burası zaten kendisi yaptığın ayarlamaya göre oluşturuyor.
Server tarafında kullanırken de şu şekilde yapmış :
Aeldranın yaptığı işlem
void CInputProcessor::Handshake(LPDESC d, std::unique_ptr<CGHandshakePacket> p)

orjinal hali
void CInputProcessor::Handshake(LPDESC d, const char* c_pData)

Aeldra
else if (header == TCGHeader::HANDSHAKE)
Handshake(d, packet.get<CGHandshakePacket>());


orjinal
else if (bHeader == HEADER_CG_HANDSHAKE)
{
Handshake(d, c_pData);
}


header fonksiyonlarında bir kaç değişiklilik yapılmış header ve bHeader değişmiş ve bunu yeni sisteme geçirdiği için yapmış TCGHeader::HANDSHAKE fonksiyonu ise yukarıda anlattıgım HANDSHAKE =>cgps.CGHandshakePacket kısmından çekiyor bu kısımda
Kod:
message CGHandshakePacket {
  uint32 handshake = 1;
  uint32 time = 2;
  sint32 delta = 3;
  bytes crypt_data = 4;
}
burda değerleri alıyor ve diğer işlemleri protobuf hallediyor sadece src kısmında bir kaç fonksiyon ismini protobuf için güncellemek yeterli oluyor.
Biraz karışık olduğu için bu işe kalkışmayı şuanlık rafa kaldırıyorum :) çünkü tam kafamda oturmayan kısımlar var yeni nesil fileslerde görmek isteyeceğimiz bir işlem fakat bilen kişilerin desteği bizim için önemli ve bu işlemi forum halkına kazandırmalıyız.
 
Protobuf ile alakalı gereken bilgi verilmiş zaten fakat bir noktaya dikkat çekmek lazım. Bu foruma kazandırılabilecek herhangi bir sistem değil hocam, bunu sadece copy-paste ile sistem ekleyen veya herhangi bir yazılım dilini (bu durumda C++) ileri düzeyde bilmeyen birine uygulatmak ileride başına iş açmamıza sebep olur, bir sorun veya hata aldığında, sunucu canlıya çıktığında problem yaşadığında yardım alabileceği kişi sayısı normalde 50 ise bu sistemi uyguladığınız zaman 5'e düşecek, bu sebeple sistemi veya dili veya tcp paket alışverişi kavramlarını belirli bir düzeyin üstünde bilmiyorsanız bu kadar büyük değişikliklere girişmeyin, Aeldra'yı protobuf'a geçiren ekibin tamamı uzman devlerden oluşuyordu, hatırlatmak isterim, sevgiler.
 
lafım kimseye değil kimse yanlış anlamasın da, arkadaşlar önce oynatıcak güzel bir files yapın. sorunu olmasın, optimizasyonu güzel olsun. bir tek protobuf eksik kalsın ya. protobuf kullansanız ne olcak kullanmasanız ne olcak. aeldra gibi olunca sizde kullanırsınız. bu kadar detaylı da geliştirmeyin ya
 
Geri
Üst