Websocket Ve Server Hakkında Sorular
-
Online bir oyun geliştirmeyi düşünüyorum. Kafa topu tarzında iki karakter arasında kapışma olacak. Arayüz ise agar mantığında olacak. Kullanıcı adı gir ve oyna tarzı.
Düşündüğüm oyunu rahat bir şekilde PhotonEngine adlı kütüphane ile geliştirebilirim. Fakat aylık ücreti 90$ ve limitleri var.
Bu yüzden kendi serverımı oluşturup kullanmak istiyorum.Okuduğum yorumlarda çoğu kişi online oyunlarda TCP'den daha hızlı olduğu için UDP'yi önermiş.
Bu yorumlardan yola çıkarak server kısmını Java, client kısmını ise C# ile kodlamayı düşünüyorum.(Android uygulama geliştirdiğim için Java'yı az çok biliyorum.Unity'de zaten C# kullanılıyor)Nasıl bir server satın almalıyım ? Hangi server benim ihtiyacımı karşılar ? Örneğin Corelux'daki aylık 30TL'lik server ile oyunda online kaç kişi olabilir ?
Bahsettiğim 30TL'lik server bilgileri :
Yeni Nesil Xeon İşlemci
1 GB Ram
40 GB Disk
Limitsiz Trafik!
1 Adet IP Adresi
100 Mbit Taban Hat
Türkiye LokasyonOyunun altyapısı ise kısaca şu şekilde olacak. Oyuna girdiğinde kullanıcı adı belirleyecek, maç arayacak. Maç arama kısmında serverdan aldığı açık olan odalardan birisine girecek. Açık oda yoksa oluşturacak. Odaya girincede sürekli olarak pozisyonunu servera iletecek.
Websocket'i daha önce denemedim. İlk defa kullanacağım. Bu konu hakkında görüşleriniz, önerileriniz ve dikkat etmem gereken noktalar nelerdir ?
-
Öncelikle kolay gelsin,
Websocket TCP protokolü üzerinden iletişim kurar, UDP değil. İşleyişi standart, bağlantı aç, mesaj gönder, mesaj al, bağlantı kapat vs..
UDP ile bir uygulama yazmadım, çok bilgim de yok. UDP de veri kaybı olabiliyor, bunu dikkate alman gerekir.
Küçük başla, hatta dikey değil yatay olarak ölçeklenebilir, genişletilebilir sistemler yaz hocam (horizontal scaling).
n-tier şeklinde çalışma yürütmek faydalı olabilir: https://eksisozluk.com/n-tier--133223 veya https://en.wikipedia.org/wiki/Multitier_architecture
verileri güvenilir bir sunucuda ya da veritabanı hizmeti sağlayan bir serviste tutup, bunun önüne tüm matematiksel/mantıksal işlemleri yürütecek, iletişim kuracak küçük-küçük ve stateless uygulamalar yazarsan ileride trafikte bir yoğunluk oluşursa daha kolay üstesinden gelirsin.
Sunucu olarak https://www.scaleway.com/pricing/ adresindeki sunucu paketlerini tavsiye ederim, pişman olmadım.
-
@RockZs Tcp'de paket gönderildiğinde server o paketi alamazsa tekrar gönderiyor, Udp'de ise sadece bir kere gönderiliyor anladığım kadarıyla.
Arkadaşım NodeJs-Socket.io ile Tcp üzerinden bir deneme yapmıştı ama realtime için yavaş kalıyor demişti. Bu yüzden Udp bağlantısı ile yapmak istedim. Oyunda karakterler sabit olup obje spawn edecekleri için şuanda Tcp bağlantısı ile localde, sonra server üzerinde deneme yapmayı, eğerki söylendiği gibi yavaş kalırsa o zaman Udp'ye geçmeyi düşünüyorum.
Horizontal scaling, n-tier gibi terimleri bilmiyordum. Bunlarıda araştıracağım.
Yorumun için teşekkürler.
-
Hocam nodejs & websocket ikilisi real-time için pek de yavaş sayılmaz aslında, bir çok online oyunda websocket ve nodejs kullanılıyor diye biliyorum. Agar-io da bu şekilde, yanılmıyorsam.
Bir de servesless sistemler var, AWS Lambda yı bu konu için araştırabilirsin (sadece nodejs için olması lazım). Bu sistemlerde sunucuyla ilgilenmiyorsun! Ama çok vaktin yoksa bunlara bakmaya şimdilik gerek yok derim, projene odaklan, elindeki malzemelerle yapmak istediğini yapabilecek gibiysen yap.
Ayrıca aşağıdaki konu başlıklarını incelersen, bazı konularda fikir edinebilirsin.
Ben teşekkür ederim, kolay gelsin..
http://www.tahribat.com/forum/database-tavsiyesi-alayim-223020
http://www.tahribat.com/forum/websocket-sikintisi-ve-cryptology-221400
http://www.tahribat.com/forum/hangi-tur-database-hangi-database-221045
http://www.tahribat.com/forum/cloud-bulut-yapisi-ve-turkiyedeki-vehameti-217862
http://www.tahribat.com/forum/php-rest-api-guvenligi-nasil-saglanir--217724
http://www.tahribat.com/forum/buyuk-projelerde-izlediginiz-adimlar-213397
http://www.tahribat.com/forum/projeyi-tutturmanin-formulu-nedir--211639
-
Hocam Agar'ı yazan elemanın reddit'de galiba bir yazısı vardı. Herif C yada C++ gibi bir dille server'ı yazmıştı. Sebebide networku ancak handle edebilmesi diye hatırlıyorum. Eğer sen Agar gibi çok oyunculu yapıcaksan başka, iki kişilik dealler şeklinde olacaksa başka. UDP'ninde sana dezavantajları var, inconsistent durumlar oluşacak falan filan. Butür realtime oyunlar için bu konuları handle etme yöntemleri var. Mesela kafa topu oyununu yapan elemanlar şöyle birşey geliştirmişler; oyuncular arasında internet bağlantısı boka sararsa interneti kötü olan elemanın oyununu bilgisayar yerine oynuyor ve düzelince internet kontorlu ona bırakıyor gibi. Realtime online oyun için birazda bu kısımlara bakmak lazım gibi sadece dil-protocol gibi şeylere takılmak için erken gibi.
