folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Reliable UDP Mantığı Nedir?



Reliable UDP Mantığı Nedir?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    h0rtl4kk
    h0rtl4kk's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek

    Şuanki socket sistemim güzel bir şekilde çalışıyor. UDP kullandığım için yapısı gereği bazen clientten servera veya serverdan cliente mesaj iletilmiyor.

    Bu iletilmeyen mesajları tekrar göndertmek istiyorum.

    En basit haliyle server tarafında şöyle bir şey denedim ama pek sağlıklı olmadı.

    Serverda bir array ve fonksiyon oluşturdum. Bu fonksiyon sürekli olarak array içerisinde şöyle bir denetleme yapıyor
    şuanki tarih - gönderilen mesaj tarihi büyükse 1 saniyeden mesajı tekrar gönder

    1.Server mesajı gönderir
    2.Server gönderdiği mesajı arrayde tutar
    3.Clientten "mesajı aldım" bilgisi 1 saniye içerisinde gelmezse server mesajı tekrar gönderir.
    4.Client mesajı alır
    5.Client "mesajı aldım" bilgisini gönderir
    6.Servera "mesajı aldım" bilgisi gelirse arrayden o item silinir.

    Sağlıklı olmamasının sebebi bazen 5.adımdaki "mesajı aldım" bilgisi servera iletilemiyor.
    Bu sistemi client tarafınıda eklersem sürekli olarak veri gitti mi, mesajı aldım gitti mi diye döngüye gireceğini düşündüğüm için yolun başındayken fikirlerinizi alıp ona göre ilerlemek istiyorum.

    TCP kullan demeyin UDP'ye girdim bir kere artık dönüşüm yok

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    TCP bunun için :)

    Uzun zamandır uğraşmadığım için öneri niteliğinde yazıyorum.

    Her mesaj içinde mesaja ait bir tanımlama numarası oluşturup, bunu bir arttırırsan paketleri sıralı yollama zorunluluğundan kurtulabilirsin. Böylece atıyorum 11 nolu paket gitmedi ise 12, 13, 14... nolu paketi gönderebilir, sistemi 11 nolu paket gitsin diye bloke etmezsin.

    Maalesef, o paket önemli ve karşıya ulaştığı bilgisi lazımsa sonsuz döngüden başka yapacak bir şey yok. Paket kayıpları artarsa o zaman neden bu kadar paket kayboluyor diye araştırma yapabilirsin.

    İşte bu nedenlerden dolayı TCP kullanmak lazım:) Özel bir uygulama olsaydı, örneğin birden fazla mobil modem ile veri yollama gibi, o zaman UDP çözüm daha mantıklı olabilirdi.

    Şu rfc'yi okumalısın: http://www.belgeler.org/rfc/rfc768.html

    Meraklılar için: http://www.belgeler.org/bgnet/bgnet_theory-twotypes.html

     

     


    Olaylara karışmayın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    h0rtl4kk
    h0rtl4kk's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek
    YeniHarman bunu yazdı

    TCP bunun için :)

    Uzun zamandır uğraşmadığım için öneri niteliğinde yazıyorum.

    Her mesaj içinde mesaja ait bir tanımlama numarası oluşturup, bunu bir arttırırsan paketleri sıralı yollama zorunluluğundan kurtulabilirsin. Böylece atıyorum 11 nolu paket gitmedi ise 12, 13, 14... nolu paketi gönderebilir, sistemi 11 nolu paket gitsin diye bloke etmezsin.

    Maalesef, o paket önemli ve karşıya ulaştığı bilgisi lazımsa sonsuz döngüden başka yapacak bir şey yok. Paket kayıpları artarsa o zaman neden bu kadar paket kayboluyor diye araştırma yapabilirsin.

    İşte bu nedenlerden dolayı TCP kullanmak lazım:) Özel bir uygulama olsaydı, örneğin birden fazla mobil modem ile veri yollama gibi, o zaman UDP çözüm daha mantıklı olabilirdi.

    Şu rfc'yi okumalısın: http://www.belgeler.org/rfc/rfc768.html

    Meraklılar için: http://www.belgeler.org/bgnet/bgnet_theory-twotypes.html

     

     

    Ilk basta TCP kullaniyordum sonrasinda UDPye gecis yaptim. UDPye gecme sebebimde online ve herkesin ayni anda oynadigi(turn based yani sira ile oynanan oyun degil ornegin satranc gibi) oyun oldugu icindi.

    Suan projede udp socket kullaniyorum. Tcpye gore gozle gorulur hiz farki var. Oynanis esnasinda saniyede 60-70 kez veri gonderiliyor. Bu kadar veriden 3-5i kaybolsun onemli degilde kullanici menudeyken Mac Ara veya Arkadaslik Istegi Gonder gibi verilerin(butona tiklaninca bir kere calisan fonksiyonlarin) iletilmemesi buyuk sıkıntı yaratiyor.

    Sabaha kadar bir cozum bulamazsam mecbur sonsuz dongude kontrol yaptiracagim.

    Onerin icin sagol. Linktekileride sabaha detaylica okurum.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Hocam bence senin mimari yanlış. 

    Udp socketi canlı yayın gibi çok önemi olmayan datalar için kullanman gerekiyor. Adam videoda 3-5 frame eksik almadı adama çok koymaz fark dahi etmez. Ama sen oyundan bahsediyorsun. Kesinlikle tcp olmalıydı. Evet udp daha hızlı ama senin verinde önemli. Trade off yapman lazım. Hızdan ödün vereyim diye projeyi perte çıkarma :)

    CS go, lol, pub g gibi oyunlar tamamen tcp.

     

    Sen audio, video streaming yapmıyorsun udp kullanma. Yada 2 socket çalıştır. Önemsiz dataları udp ile gönder önemli olanları tcp

    MhmdAlmz tarafından 04/Oca/20 07:19 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    Tekerleği baştan icat etmeye lüzum yok hocam. Neden mosquitto tarzı bir broker kullanmıyorsun 


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NoktaliVirgul
    NoktaliVirgul's avatar
    Kayıt Tarihi: 02/Temmuz/2007
    Erkek

    Pro degilim ancak, 

    Oyun sırasında udp, menü VS gibi Server komut gönderilmesi gereken ilerde tcp kullansan iş çözülür 


    If my calculations are correct, when this baby hits eighty-eight miles per hour... you"re gonna see some serious shit.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    WebSocket kullanmalısın hocam.

    WebSockets, on the other hand, allow for sending message-based data, similar to UDP, but with the reliability of TCP.


    Sen hiç kaval çaldın mı?
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    h0rtl4kk
    h0rtl4kk's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek

    Yorumlarınız için teşekkürler. Çoklu alıntıyı çözemediğim için buradan yazayım :)

    LoL tarzı oyunlar nasıl çalışıyor diye önceden bakmıştım. Menude TCP, oyunda UDP kullanıyorlar diye biliyorum. Belki benimde bu şekilde TCP ve UDP bağlantısı kullanmam gerekirdi. Network konusunu çok fazla araştırmadan bir acemilik yapıp projeye giriştim.

    Şuan projenin sonuna geldim ve yeni bir şey eklemek için 1-2 günüm dahi yok. Bu yüzden geçici olarak ilk mesajda yazdığım sistemi ekleyip projeyi teslim ettikten sonra muhtemelen menu kısmını TCP ile yaparım.

Toplam Hit: 1790 Toplam Mesaj: 8
socket udp rudp reliable udp udp socket