Saya menggunakan Node.js dan Redis. Saya mencoba menemukan cara yang dapat diandalkan untuk mengotomatiskan pemain. Ada server yang cocok dan kemudian beberapa server game disiapkan.
Berikut ini adalah apa yang saya butuhkan untuk terjadi:
- Pemain mengirimkan permintaan bergabung dengan jenis permainan (kecil / sedang dll)
- Server yang cocok menambah pemain ke jenis permainan saat ini yang sedang menunggu pemain
- Server gim mengirimkan ID gim kepada pemain
Saat ini saya telah menerapkan ini sebagai berikut:
- Server yang cocok mendengarkan game: antrian: kecil menggunakan BRPOP
- Memeriksa apakah game: antrian: kecil: id = id ada
- Memeriksa apakah game: id: panjang pengguna <= 6 (pemain maks)
- Menambahkan pemain ke permainan: id: daftar pengguna jika ada
- Jika panjang game sekarang 6, itu akan menghapus game: antrian: kecil: id
Jika server yang cocok menemukan game: antrian: kecil: id tidak ada, itu adalah sebagai berikut:
- Game INCR: nextGameId
- Setel permainan: antrian: kecil: id ke ID yang dibuat sebelumnya
- Menambahkan ID game ke game: antrian: menunggu
Server game menunggu menggunakan BRPOP untuk game baru. Ketika mereka mendapatkannya, mereka menunggu sampai permainan memiliki minimal 2 pengguna kemudian memulai timer. Jika mereka tidak mengisi waktu itu, mereka mulai dengan pengguna yang mereka miliki dan kemudian menghapus game: antrian: kecil: id (sehingga memaksa mak comblang untuk meminta game baru).
Sementara metode saya bekerja, saya tidak yakin itu akan bekerja dengan baik dalam produksi dan tampaknya sangat berbelit-belit. Saya dapat melihat potensi untuk masalah berikut:
- Server permainan macet setelah menerima ID permainan dari daftar tunggu sehingga pengguna ditambahkan ke permainan: id: pengguna tetapi tidak ada yang terjadi dengan mereka (kerusakan itu sendiri bukan masalah, tetapi pengguna terus menambahkan bahwa antrian permainan adalah )
- Jika pengguna terputus dan game belum dimulai, server game akan menghapus pengguna dari game: id: daftar pengguna. Sementara itu sedang dalam proses melakukan itu, server perjodohan bisa menambahkan pengguna ke daftar dan berpikir permainan sudah penuh, sehingga menghapusnya dari antrian.
Pikiran awal saya adalah berubah menjadi satu antrian pengguna yang menunggu satu jenis permainan. Namun, ini menyajikan masalah lebih lanjut:
- Jika server yang disambungkan pengguna mengalami kerusakan, server tidak akan menghapus pengguna dari antrian sehingga meninggalkan pengguna untuk dimasukkan ke dalam permainan saat mereka tidak ada. Saya dapat menggunakan set yang disortir untuk menyimpan waktu permintaan dan meminta polling klien sampai mendapat ID permainan yang dikembalikan, tetapi ini berarti bahwa saya tidak tahu berapa lama klien menunggu dan karena itu tidak tahu apakah akan memulai permainan dengan lebih sedikit pengguna.
- Tanpa menempatkan pengguna ke dalam game, mereka tidak memiliki kemampuan untuk melihat apa yang telah bergabung dengan pengguna, atau kemampuan untuk mengobrol dengan pengguna yang menunggu (karena itu membutuhkan ID game).
Tak satu pun dari cara saya mengatur ini terasa benar jadi saya berharap seseorang mungkin dapat menawarkan beberapa saran yang lebih baik. Saya benar-benar harus menjaga server game dan server perjodohan terpisah agar tumbuh mereka seperti yang diperlukan.