Dalam permainan online, orang lebih suka masuk dan keluar kapan pun mereka mau. Biasanya, pencapaian gim mereka disimpan dengan mulus di server. Itu tidak terlalu sulit untuk dicapai, tetapi saya bertanya-tanya bagaimana bisa dilakukan dengan cara yang efisien yang masuk akal dan kemauan.
Apakah masuk akal untuk menyimpan koordinat dan status pemain setiap kali mereka mengirimnya? Server node.js saya dapat melakukan itu dengan mudah tanpa memblokir respons, dan saya ingin menggunakan database Mongo, tapi mungkin lebih tepat untuk melakukannya satu detik sekali dan dalam acara di seluruh server, mengumpulkan semuanya sekaligus?
Jawaban:
Saya memiliki MMORPG tradisional seperti World of Warcraft.
Simpan setelah setiap perintah dari setiap pemain dan hal otonom (mis. NPC)
Simpan semuanya secara berkala
Simpan karakter saat keluar (jangan simpan yang lain)
Pikiran penutup
Terakhir, jangan menganggap nasihat ini sebagai kebenaran absolut. Saya belum menulis sistem cadangan multipemain. Saya sedang mengerjakan "game" online, itulah sebabnya saya memikirkan hal ini dan menulis pemikiran saya di atas, tetapi saya belum sampai pada tahap implementasi ini. Jadi ini ditulis tanpa pengalaman nyata, tetapi setelah banyak membaca dan mengumpulkan pengetahuan tentang topik tersebut.
sumber
Saya kira itu tergantung pada jenis permainan dan jumlah lalu lintas antara pemain dan server.
Dalam MMORPG, tidak masuk akal untuk menyimpan posisi pemain setiap kali mereka mengirim informasi ke server. Akan lebih masuk akal untuk memperbarui ketika data pemain saat ini 'basi', bisa dikatakan. Mungkin juga bermanfaat untuk menyelamatkan keadaan pemain pada acara-acara besar seperti menyeberang ke wilayah baru, mengalahkan bos atau meninggalkan toko.
Dalam permainan berbasis giliran, masuk akal untuk menyelamatkan keadaan pemain setiap kali mereka mengakhiri giliran mereka serta setelah giliran pemain lawan (menghemat kehilangan kesehatan, efek mantra, dll.).
Sekali lagi, jawabannya tergantung sepenuhnya pada skala dan kemampuan server Anda. Ini semua tentang menemukan keseimbangan terbaik dan mengoptimalkan sebanyak mungkin tanpa mengorbankan kualitas.
sumber
Jika satu-satunya kekhawatiran Anda adalah ketika mereka keluar, maka satu jawaban sederhana adalah untuk menyimpan posisi mereka ketika kondisi apa pun bagi mereka tidak ada lagi di dunia game (karena keluar atau terputus) terjadi.
Di samping catatan, saya akan agak waspada terhadap klien melaporkan ke posisi server itu, atau setidaknya tanpa beberapa bentuk pemeriksaan sisi server kewarasan. Jika Anda sudah memiliki ini di tempat, Anda mungkin dapat menyimpan posisi itu log off atau putuskan karena Anda tidak perlu khawatir mendapatkan data apa pun dari klien secara langsung.
sumber