Server game untuk board-game berbasis giliran Android / iOS

9

Saat ini saya sedang memprogram game iPhone dan saya ingin membuat mode multiplayer online. Di masa depan, aplikasi ini akan menjadi port ke perangkat Android, jadi saya bertanya-tanya bagaimana cara membuat game-server?

Pertama-tama, bahasa apa yang harus saya pilih? Bagaimana membuat server dapat berkomunikasi baik dengan program yang ditulis dalam objektif-c dan Java?

Lalu, bagaimana cara efektif melakukannya? Apakah baik jika saya membuka soket oleh klien (akan ada 2)? Informasi apa yang harus saya kirim ke server? kepada klien?

Cyril
sumber

Jawaban:

7

Saya tidak bermaksud memulai perang suci di sini, tetapi sebagian besar layanan internet (flickr, twitter, facebook, dan sejenisnya) telah menjatuhkan SOAP demi layanan web RESTful dan JSON sebagai format serial. Meskipun pada dasarnya sama, layanan REST mengandalkan metode url dan http untuk menentukan apa yang harus dilakukan, misalnya

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

JSON - dijelaskan dalam json.org - juga lebih sederhana dari XML, dan meskipun mungkin tidak relevan, akan menghemat beberapa byte per permintaan. Mengikuti contoh sebelumnya, inilah cara artikel akan dijelaskan dalam notasi JSON:

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

Untuk iOS ada artikel bagus ini http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ yang menyebutkan http://code.google.com/p/json-framework / untuk parsing dan menghasilkan data.

Menjadi berbasis giliran, Anda bisa mengandalkan sesi http di server untuk mempertahankan status, jadi tidak perlu menyimpan koneksi soket yang persisten ke server. Bahasa sisi server mendukung hal ini (php, python, java, dll).

Arsitektur ini memungkinkan Anda untuk skala secara horizontal (menambahkan lebih banyak server) secara transparan.

guigouz
sumber
4

Karena gim Anda akan berbasis giliran, pembaruan waktu-nyata tidak super penting. Cara termudah untuk melakukan ini adalah dengan menggunakan server yang sudah dibangun, saya akan pergi dengan server web. Platform apa pun yang layak untuk porting permainan Anda harus memfasilitasi mengakses layanan web yang terletak di server web.

Untuk memberikan pembaruan dalam waktu dekat, saya sarankan Anda melihat polling panjang. Kode pada tautan itu, menyediakan implementasi paling panjang dari polling dari sisi server. Tetapi intinya adalah bahwa sekali permintaan dibuat ke sumber daya, server mengeksekusi panggilan pemblokiran hingga data yang diminta tersedia. Kemudian Anda ulangi proses itu lagi, dan lagi.

Dalam hal data apa yang harus Anda kirim kembali, selalu memperlakukan klien sebagai musuh. Klien harus mengirim apa pun "turn-state" -nya, server memvalidasinya, dan kemudian jika semuanya memeriksa, ia akan mengirim "game-state" baru kembali ke semua klien yang terhubung.

-

Layanan web SOAP mungkin adalah tempat terbaik untuk memulai ( tautan ), mereka mudah untuk memulai, dan sebagian besar kerangka kerja web menyediakan metode untuk mengeksposnya. Anda mungkin juga ingin melihat ke dalam layanan RESTful, tetapi mereka biasanya meninggalkan sedikit lebih banyak proses serialisasi kepada konsumen.

Untuk mengkonsumsi layanan web SOAP di Android, saya akan melihat di sini .

Nate
sumber
Hai dan terima kasih atas tanggapan Anda. Tapi saya belum mengerti bagaimana cara mengirim data ke layanan web saya? bagaimana cara membuat serial input pengguna (di sini gerakan di papan 8 * 8 saya misalnya: pemain 1 dari [0,0] ke [1,1]) dan kemudian bagaimana cara membuat serial keadaan permainan?
Cyril
Periksa dua tautan yang saya tambahkan. Mereka seharusnya membantu Anda memulai dengan layanan web SOAP, yang mungkin merupakan cara paling sederhana untuk memulai.
Nate
Untuk Android dan iOS Anda tidak perlu menggunakan polling panjang. Pemberitahuan Push Apple atau Google Cloud Messaging akan memungkinkan Anda mendorong data dari server ke perangkat Anda.
Matt
2

Saya pikir menggunakan SOAP atau bahkan HTTP berlebihan. Cukup tentukan protokol Anda sendiri melalui koneksi vanilla TCP. Misalnya, tafsirkan setiap baris teks yang dikirim sebagai perintah. Tetapkan perintah / respons apa yang boleh dikirim oleh klien dan server.

FICS bekerja seperti itu dan telah melayani ribuan pemain catur selama bertahun-tahun. IRC juga bekerja seperti itu (lihat RFC 1459).

mdm
sumber
HTTP menawarkan beberapa keuntungan, meskipun: ia dapat menggunakan proxy, hampir tidak pernah dibobol, ia menawarkan enkripsi yang hampir transparan menggunakan HTTPS, memiliki beberapa metode otentikasi ...
sam hocevar