Interaksi klien/server game dengan Amazon GameLift - Amazon GameLift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Interaksi klien/server game dengan Amazon GameLift

Komponen dalam solusi GameLift hosting Amazon Anda berinteraksi satu sama lain dengan cara tertentu untuk menjalankan sesi permainan dalam menanggapi permintaan pemain. Topik ini menjelaskan bagaimana komponen berkomunikasi satu sama lain ketika server game Anda di-host di armada yang GameLift dikelola Amazon, EC2 armada Amazon GameLift Anywhere yang dikelola sendiri, atau solusi hybrid.

Komponen solusi hosting termasuk server game, GameLift layanan Amazon, layanan backend sisi klien, dan klien game. Server game menggunakan GameLift server Amazon SDK untuk berinteraksi dengan GameLift layanan Amazon. Layanan backend menggunakan GameLift layanan Amazon API (bagian dari AWS SDK) untuk berinteraksi dengan layanan atas nama klien game. Saat bergabung dengan sesi permainan, klien game terhubung langsung ke sesi game menggunakan alamat IP dan nomor port unik sesi game.

Diagram interaksi

Diagram berikut menggambarkan bagaimana komponen hosting game Anda berinteraksi sehingga GameLift layanan Amazon dapat melacak status ketersediaan server game dan memulai sesi permainan dalam menanggapi permintaan pemain.

Perilaku klien/server game untuk interaksi utama, seperti yang dijelaskan dalam topik ini.

Perilaku interaksi

Bagian berikut menjelaskan urutan peristiwa di setiap interaksi kunci.

Menginisialisasi proses server game

Saat startup, proses server game membangun komunikasi dengan GameLift layanan Amazon dan melaporkan statusnya sebagai siap untuk menjadi tuan rumah sesi game.

  1. Proses baru dari server game yang dapat dieksekusi mulai berjalan pada sumber daya hosting.

  2. Proses server game memanggil SDK operasi server berikut secara berurutan:

    1. InitSDK()untuk menginisialisasi serverSDK, mengautentikasi proses server, dan menjalin komunikasi dengan layanan Amazon GameLift .

    2. ProcessReady()untuk mengkomunikasikan kesiapan untuk menyelenggarakan sesi permainan. Panggilan ini juga melaporkan informasi koneksi proses, yang digunakan klien game untuk terhubung ke sesi permainan, dan informasi lainnya.

    Proses server kemudian menunggu permintaan dari layanan Amazon GameLift .

  3. Amazon GameLift memperbarui status proses server ACTIVE dan tersedia untuk meng-host sesi permainan baru.

  4. Amazon GameLift mulai memanggil panggilan onHealthCheck balik secara berkala untuk meminta status kesehatan dari proses server. Panggilan ini berlanjut saat proses server tetap dalam status aktif. Proses server harus merespon sehat atau tidak sehat dalam satu menit. Jika proses server merespons tidak sehat atau tidak merespons, pada titik tertentu GameLift layanan Amazon mengubah status aktif proses server dan berhenti mengirim permintaan untuk memulai sesi permainan.

Membuat sesi game

GameLift Layanan Amazon memulai sesi permainan baru sebagai tanggapan atas permintaan dari pemain untuk memainkan game.

  1. Seorang pemain yang menggunakan klien game meminta untuk bergabung dengan sesi permainan. Bergantung pada bagaimana game Anda menangani proses bergabung pemain, klien game mengirimkan permintaan ke layanan backend.

  2. Jika proses bergabung pemain memerlukan memulai sesi permainan baru, layanan backend mengirimkan permintaan untuk sesi permainan baru ke layanan Amazon GameLift . Permintaan ini memanggil API operasi layananStartGameSessionPlacement(). (Sebagai alternatif, layanan backend mungkin memanggilStartMatchmaking(), atauCreateGameSession().)

  3. GameLift Layanan Amazon merespons dengan membuat GameSessionPlacement tiket baru dengan statusPENDING. Ini mengembalikan informasi tiket ke layanan backend, sehingga dapat melacak status tiket penempatan dan menentukan kapan sesi permainan siap untuk pemain. Untuk informasi selengkapnya, lihat Atur notifikasi kejadian untuk penempatan sesi game.

  4. GameLift Layanan Amazon memulai proses penempatan sesi permainan. Ini mengidentifikasi armada mana yang harus dilihat dan mencari armada tersebut untuk proses server aktif yang tidak menghosting sesi permainan. Saat menemukan proses server yang tersedia, GameLift layanan Amazon melakukan hal berikut:

    1. Membuat GameSession objek dengan pengaturan sesi permainan dan data pemain dari permintaan penempatan, dan menetapkan status keACTIVATING.

    2. Meminta proses server untuk memulai sesi permainan. Layanan memanggil onStartGameSession callback proses server dan meneruskan objek. GameSession

    3. Mengubah jumlah sesi permainan proses server menjadi1.

  5. Proses server menjalankan fungsi onStartGameSession callback-nya. Ketika proses server siap menerima koneksi pemain, ia memanggil SDK operasi server ActivateGameSession() dan menunggu koneksi pemain.

  6. GameLift Layanan Amazon memperbarui GameSession objek dengan informasi koneksi untuk proses server (seperti yang dilaporkan dalam panggilan keProcessReady()) dan menetapkan status sesi game keACTIVE. Ini juga memperbarui status GameSessionPlacement tiket keFULFILLED.

  7. Layanan backend memanggil DescribeGameSessionPlacement() untuk memeriksa status tiket dan mendapatkan informasi sesi permainan. Saat sesi permainan aktif, layanan backend memberi tahu klien game dan meneruskan informasi koneksi sesi game.

  8. Klien game menggunakan informasi koneksi untuk terhubung langsung ke proses server game dan bergabung dengan sesi permainan.

Menambahkan pemain ke game

Sebuah game secara opsional dapat menggunakan sesi pemain untuk melacak koneksi pemain ke sesi permainan. Sesi pemain dapat dibuat secara individual atau sebagai bagian dari permintaan penempatan sesi permainan.

  1. Layanan backend memanggil API operasi layanan CreatePlayerSession() dengan ID sesi game.

  2. GameLift Layanan Amazon memeriksa status sesi permainan (harusACTIVE), dan mencari slot pemain terbuka di sesi permainan. Jika slot tersedia, maka layanan melakukan hal berikut:

    1. Membuat PlayerSession objek baru dan menetapkan status keRESERVED.

    2. Menanggapi permintaan layanan backend dengan informasi sesi pemain.

  3. Layanan backend meneruskan informasi sesi pemain ke klien game bersama dengan informasi koneksi sesi game.

  4. Klien game menggunakan informasi koneksi dan ID sesi pemain untuk terhubung langsung ke proses server game dan meminta untuk bergabung dengan sesi permainan.

  5. Menanggapi upaya bergabung klien game, proses server game memanggil API operasi layanan AcceptPlayerSession() untuk memvalidasi ID sesi pemain. Proses server bisa menerima atau menolak connection.

  6. GameLift Layanan Amazon melakukan salah satu hal berikut:

    1. Jika koneksi diterima, maka Amazon GameLift menetapkan PlayerSession status ke ACTIVE dan meneruskan PlayerSession ke proses server game.

    2. Jika proses server game tidak memanggil AcceptPlayerSession() ID sesi pemain dalam jangka waktu tertentu setelah CreatePlayerSession() permintaan asli, GameLift layanan Amazon mengubah PlayerSession status TIMEDOUT dan membuka kembali slot pemain di sesi permainan.

Menghapus pemain

Untuk game yang menggunakan sesi pemain, proses server game memberi tahu GameLift layanan Amazon saat pemain terputus. Layanan ini menggunakan informasi ini untuk melacak status slot pemain dalam sesi permainan dan dapat memungkinkan pemain baru untuk menggunakan slot terbuka.

  1. Seorang pemain terputus dari sesi permainan.

  2. Proses server game mendeteksi koneksi yang hilang dan memanggil SDK operasi RemovePlayerSession() server.

  3. GameLift Layanan Amazon mengubah status sesi pemain COMPLETED dan membuka kembali slot pemain di sesi permainan.

Mematikan sesi permainan

Di akhir sesi permainan, atau saat mematikan sesi permainan, proses server memberi tahu GameLift layanan Amazon tentang status sesi game.

  1. Proses server game mengakhiri sesi permainan dan memulai proses shutdown dengan memanggil SDK operasi ProcessEnding() server.

  2. GameLift Layanan Amazon melakukan hal berikut:

    1. Mengunggah log sesi game ke Amazon Simple Storage Service (Amazon S3).

    2. Mengubah status sesi game menjadiTERMINATED.

    3. Mengubah status proses server menjadiTERMINATED.

    4. Bergantung pada bagaimana solusi hosting dirancang, sumber daya hosting yang baru tersedia dialokasikan untuk menjalankan proses server game baru.