Android / iOS sıra tabanlı bir masa oyunu için oyun sunucusu


9

Şu anda bir iPhone oyunu programlıyorum ve çevrimiçi çok oyunculu bir mod oluşturmak istiyorum. Gelecekte, bu uygulama Android cihazlara bağlantı noktası olacak, bu yüzden oyun sunucusunu nasıl oluşturacağımı merak ediyordum?

Öncelikle hangi dili seçmeliyim? Bir sunucuyu obj-c ve Java ile yazılmış programlarla nasıl iletişim kurabilirim?

O zaman, etkili bir şekilde nasıl yapılır? Müşteri tarafından bir soket açmam iyi olur mu (2 tane olacak)? Sunucuya ne tür bilgiler göndermeliyim? müşterilere?

Yanıtlar:


7

Burada kutsal bir savaş başlatmak istemiyorum, ancak internet hizmetlerinin çoğu (flickr, twitter, facebook ve benzeri) serileştirilmiş biçim olarak RESTful web hizmetleri ve JSON lehine SOAP düşürüyor. Esasen aynı olmasına rağmen, REST hizmetleri ne yapılması gerektiğini tanımlamak için url ve http yöntemine güvenir, örneğin

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - json.org'da açıklanmıştır - XML'den daha basittir ve belki de alakasız olsa da, istek başına birkaç bayt tasarruf etmenizi sağlar. Önceki örneği izleyerek, bir makalenin JSON gösteriminde nasıl açıklanacağı aşağıda açıklanmıştır:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

IOS için bu güzel makale var http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ bahseder http://code.google.com/p/json-framework / verileri ayrıştırmak ve üretmek için.

Sıra tabanlı olduğundan, durumu korumak için sunucudaki http oturumlarına güvenebilirsiniz, bu nedenle sunucuya kalıcı bir soket bağlantısı kurmanıza gerek yoktur. Herhangi bir sunucu tarafı dili bunu destekler (php, python, java, vb.).

Bu mimari, şeffaf bir şekilde yatay olarak ölçeklendirmenize (daha fazla sunucu ekleyerek) izin verir.


4

Oyununuz sıra tabanlı olacağından, gerçek zamanlı güncellemeler çok önemli değildir. Bunu yapmanın en kolay yolu zaten oluşturulmuş bir sunucu kullanmaktır, bir web sunucusuyla giderdim. Oyununuzu taşımaya değer herhangi bir platform, bir web sunucusunda bulunan web hizmetlerine erişmeyi kolaylaştırmalıdır.

Gerçek zamanlıya yakın güncellemeler sağlamak için uzun oylamaya bakmanızı öneririm . Bu bağlantıdaki kod, sunucu tarafından uzun yoklamanın en temel uygulamasını sağlar. Ancak sonuçta, bir kaynak için bir istek yapıldığında, istenen veri kullanılabilir hale gelinceye kadar sunucunun engelleme çağrısı yürütmesidir. Sonra işlemi tekrar tekrar tekrar.

Hangi verileri geri göndermeniz gerektiği konusunda müşteriye her zaman düşmanca davranın. İstemci "dönüş durumu" ne olursa olsun göndermelidir, sunucu bunu doğrular ve sonra her şey kontrol edilirse, yeni "oyun durumu" nu bağlı tüm istemcilere geri gönderir.

-

SOAP web hizmetleri muhtemelen başlamak için en iyi yerdir ( bağlantı ), başlamak kolaydır ve çoğu web çerçevesi bunları ortaya çıkarmak için bir yöntem sağlar. Ayrıca RESTful hizmetlerine bakmak isteyebilirsiniz, ancak bunlar genellikle serileştirme sürecinin biraz daha fazlasını tüketiciye bırakır.

Android'de SOAP web hizmetlerini tüketmek için buraya bakardım .


Merhaba ve yanıtınız için teşekkürler. Ancak web hizmetime nasıl veri gönderileceğini henüz anlamıyorum? kullanıcı girişi nasıl serileştirilir (burada 8 * 8 kartımda bir hareket örneğin: oyuncu 1 [0,0] - [1,1]) ve sonra oyun durumunu nasıl serileştiririm?
Cyril

Eklediğim iki bağlantıyı kontrol edin. Onlar muhtemelen başlamak için en basit yolu olan SOAP web hizmetleri ile başlamak gerekir.
Nate

Android ve iOS için uzun yoklama kullanmanız gerekmez. Apple Push Bildirimleri veya Google Cloud Messaging, verileri sunucudan cihazlarınıza aktarmanıza olanak tanır.
Matt

2

Bence SOAP veya HTTP kullanmak aşırıya kaçmış. Vanilya TCP bağlantıları üzerinden kendi protokolünüzü tanımlamanız yeterlidir. Örneğin, komut olarak gönderilen her metin satırını yorumlayın. İstemcinin ve sunucunun göndermesine izin verilen komutları / yanıtları tanımlayın.

FICS bu şekilde çalışıyor ve yıllardır binlerce satranç oyuncusuna hizmet ediyor. IRC de bu şekilde çalışır (bkz. RFC 1459).


HTTP olsa da, çeşitli avantajlar sunar: proxy'leri kullanabilir, neredeyse hiç güvenlik duvarına sahip değildir, HTTPS kullanarak şeffaf şifreleme sunar, çeşitli kimlik doğrulama yöntemleri vardır ...
sam hocevar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.