Bagaimana saya bisa membuat game multiplayer p2p? Saya ingin memiliki game multiplayer tanpa server. Namun, bagaimana semua klien saling kenal?
Mengapa p2p-protocol sangat terkenal dalam transfer file tetapi tidak dalam game multi-pemain?
Bagaimana saya bisa membuat game multiplayer p2p? Saya ingin memiliki game multiplayer tanpa server. Namun, bagaimana semua klien saling kenal?
Mengapa p2p-protocol sangat terkenal dalam transfer file tetapi tidak dalam game multi-pemain?
Jawaban:
Game peer to peer umumnya masih memiliki host game. Ini adalah host permainan yang memposting game ke daftar master game dan menerima koneksi baru. Setiap kali tuan rumah permainan menerima klien baru ke permainan, ia memberi tahu semua klien yang ada tentang klien baru sehingga mereka dapat memastikan mereka terhubung ke klien baru.
Cara paling sederhana untuk mengimplementasikan p2p adalah dengan lobi. Semua klien terhubung ke tuan rumah di lobi (atau ruang obrolan). Ketika tuan rumah siap pemain menekan mulai dan mereka semua memasuki permainan pada saat yang sama (biasanya digunakan dalam permainan strategi). Pendekatan yang lebih kompleks adalah dengan menggunakan "drop-in drop-out" di mana pemain dapat bergabung dan meninggalkan mid game, namun ini jauh lebih kompleks untuk diimplementasikan dalam game p2p dan memerlukan fitur yang disebut migrasi host.
Sejumlah besar permainan menggunakan jaringan peer to peer, termasuk sebagian besar strategi, olahraga, dan gelar mengemudi. Hampir semua game Xbox360 dan PS3 menggunakan jaringan p2p. Arsitektur client-server sebagian besar digunakan dalam first person shooter atau game MMO.
Client-Server umumnya lebih mudah diimplementasikan karena hanya 1 mesin yang belum mengetahui seluruh kondisi permainan, klien pada dasarnya hanya penyaji dengan beberapa prediksi untuk membuat segalanya terlihat mulus.
Saat Anda membangun mesin p2p, semua klien membutuhkan keadaan penuh dari dunia game dan mereka semua diharuskan untuk tetap sinkron.
Untuk detail lebih lanjut tentang p2p dan arsitektur client-server, saya sarankan Anda membaca artikel berikut: Apa yang Perlu Diketahui Setiap Programmer Tentang Game Networking .
Dan jika Anda baru mengenal jejaring secara umum, cek artikel hebat lainnya di situs itu. Glenn adalah seorang jenius jaringan.
Ada banyak alasan p2p tidak populer di game, sebagian besar karena lag. Setiap orang selambat pemain paling lambat. Kami tidak berbicara tentang bandwidth di sini, tetapi waktu ping.
p2p dapat mentransfer banyak data, tetapi melakukannya dengan ping yang cukup tinggi, gim harus mengirimkan data yang sangat kecil, dengan waktu ping yang minimal.
Ada beberapa aspek menarik tentang sistem peer-to-peer dan game aksi. Saya mencoba mempostingnya sebagai komentar di blog Glenn Fiedler, tetapi ternyata dia tidak suka terbukti salah dan malah menarik seluruh artikel. Ada di Internet Archive, kalau-kalau Anda ingin membacanya.
Dia tidak membiarkan komentarnya online, jadi saya akan kutip di sini:
Saran Peer-to-Peer dari posting pertama sebenarnya merupakan titik awal yang menarik, meskipun kadang-kadang agak naif: Kemungkinan pertama adalah menggabungkan sistem dengan model klien / server standar dengan prediksi seperti yang diuraikan dalam posting Anda tentang jaringan game. Ping P2P yang lebih rendah akan secara dramatis mengurangi jeda prediksi antar pemain tergantung pada lokasinya: Efeknya mungkin tidak akan terlihat bagi sebagian besar gamer AS, tetapi di sini di Eropa ping yang berisi 200+ normal di sebagian besar server dan koneksi langsung akan mengurangi prediksi lag ke server Eropa.
Pendekatan P2P sejati tanpa server sedikit lebih kompleks: Perhatian utama dengan jaringan desentralisasi adalah memastikan konsistensi, terutama jika simulasi dapat mengalami efek kupu-kupu karena waktu perintah yang sedikit berbeda yang dikirim melalui jaringan atau masalah floating point. Ini dimungkinkan dengan membangun jaringan setiap objek (pemain, NPC, ...) setidaknya secara berkala. Bahkan tidak perlu melakukannya untuk semua objek sekaligus, dan setiap klien dapat memiliki objek tertentu. Jaringan cukup banyak objek dalam waktu tertentu harus meredam perbedaan yang membangun antara setiap sinkronisasi suatu objek cukup untuk menjadi tidak relevan bahkan untuk interval sinkronisasi satu detik atau lebih.
Masalah kedua dengan sistem P2P adalah keamanan, tetapi itu dapat diselesaikan dengan perbaikan yang relatif kecil dalam kasus ini: Klien dapat menggunakan simulasi fisika mereka untuk mengumpulkan informasi tentang tingkat kesalahan pada setiap objek fisika. Fisika yang dimanipulasi selalu menghasilkan kesalahan yang lebih besar, sehingga klien hanya akan "memilih" untuk memutuskan sambungan dari rekannya yang mengendalikan objek yang mencurigakan. Selain itu, pesan kontrol untuk objek non-fisika diteruskan antara klien berdasarkan kepentingannya: Pembaruan pemain dapat diteruskan secara acak, pembaruan penting dan jarang harus selalu dikirim, tetapi masih ke pemain acak. Dengan cara ini seorang pemain harus mengendalikan sebagian besar klien yang terhubung untuk dapat menipu dengan cara apa pun yang terlihat.
[...]
Anda dapat menemukan utas yang saya referensikan di http://www.devmaster.net/forums/showthread.php?t=14640 .
Saya pikir seseorang menyebutkan masalah firewall peer-to-peer ada di salah satu utas dari artikel. Solusi yang memungkinkan adalah NAT-Punchthrough:
- Tinjauan umum NAT Punchthrough
- Komunikasi Peer-to-Peer di Seluruh Jaringan Alamat Penerjemah
Tidak ada tingkat keberhasilan 100%, jadi Anda harus memberitahu para pemain untuk tetap membuka port.
Sebuah contoh yang baik dari gameplay 'peer-to-peer sejati' akan menjadi gim strategi waktu-nyata seperti Starcraft.
Dalam permainan dengan ratusan unit / proyektil bergerak, tidak praktis untuk berulang kali mengirim posisi unit / status melalui jaringan ke semua pemain lain, jadi satu solusi di sini adalah semua pemain menjalankan simulasi (persis sama) dalam sinkronisasi.
Ketika satu pemain melakukan aksi, perintah / perintah ('pindahkan zergling ke X, Y') dapat dikirim ke semua pemain lain, untuk dieksekusi oleh semua contoh simulasi, sepersekian detik kemudian.
Dalam situasi ini, jika ada pemain yang terputus, permainan dapat berlanjut - karena tidak perlu server / host menjalankan permainan, pemain yang tersisa dapat melanjutkan.
Namun, menjaga permainan dalam sinkronisasi tidak sepele, Anda harus menggunakan tanda waktu tetap untuk pembaruan logika game, dan harus sangat berhati-hati dengan penggunaan dan penyemaian generator angka acak, untuk memastikan bahwa simulasi tidak akan berbeda!
Akan sedikit tidak jujur untuk mengklaim bahwa itu tidak terkenal untuk permainan ketika kebanyakan game Strategi Waktu Nyata (seri Star Craft, Seri Command and Conquer) dan banyak game FPS (Call of Duty: Modern Warfare 2) menggunakannya.
Yang mengatakan bagaimana seseorang belajar tentang permainan adalah hingga layanan perjodohan / lobi yang Anda gunakan atau buat. Tetapi bahkan sekali orang belajar tentang permainan, masih mungkin ada satu atau lebih teman yang lebih setara dari yang lain. Pertimbangkan kasus 3 klien yang ingin bermain, satu di belakang nat terbuka, 2 di belakang ketat (Tertutup) nats. Open nat peer dapat mengambil koneksi dari dua lainnya. Tetapi 2 ketat tidak dapat terhubung langsung satu sama lain, mereka akan memerlukan nat terbuka untuk menyampaikan paket. Jika nat peer terbuka turun dari gim, maka estafet lain perlu ditemukan atau gim tersebut akan terganggu.
Anda mungkin ingin menjalankan dengan satu pemain (Kami akan memanggilnya "Tuan Rumah") sebagai server yang tidak resmi. Anda akan membuat semua pemain lain mengomunikasikan apa yang mereka lakukan di ujung mereka dengan tuan rumah kami, dan tuan rumah akan menyampaikan pesan ke pemain lain.
Anda mungkin juga ingin memberikan daftar komputer yang terhubung ke pemain hosting sehingga jika mereka menjatuhkan host baru dapat dipilih dan mulai berkomunikasi dengan pemain yang tersisa.
Dokumentasi untuk smartfoxserver dapat membantu Anda dan / atau akhirnya Anda ingin menggunakannya untuk game Anda. Anda baru saja menanamkannya ke dalam permainan klien Anda alih-alih memiliki program klien dan server yang terpisah.
Saya sedikit tertarik dengan masalah ini. Anda mengatakan ada banyak masalah dengan membuat game p2p alih-alih model client-server klasik. Tapi saya cukup yakin bahwa P2P adalah seperti client-server tetapi setiap rekan memiliki kesempatan untuk menjadi server. Tentang LAG jika Anda menambahkan satu mesin lagi sebagai server, ada lebih banyak peluang yang jauh dari klien, tetapi menggunakan p2p tidak ada mesin tambahan di lobi, Anda dapat mengelola tes latensi dan membuat grup dengan ping minimal. Tentang menghasilkan lalu lintas, karena saya telah belajar Anda harus meminta klien untuk mengirimkan lebih sedikit daripada yang saya maksud klien harus mencari semua klien lain yang mau berarti.
Jika Anda membuat mmorpg yang tampak sederhana dengan persyaratan sistem yang rendah, saya sarankan untuk membuat program internal yang menciptakan "frekuensi" berdasarkan pada isi folder gim dan apa isi file-file tersebut. Ini akan membuat orang dengan "frekuensi" yang sama bermain di saluran yang sama. Klien yang dimodifikasi, dimanipulasi, atau normal akan dipisahkan. Ini hanya akan berfungsi untuk peretasan atau mod asli, tapi saya yakin ini mencakup semua curang "bodoh". Dikombinasikan dengan metode pengecekan kesalahan yang disebutkan oleh satu orang berarti sedikit atau tidak perlu moderasi. Sejauh port pergi, hanya perlu menutup port 52225 dengan proses latar belakang yang tetap terhubung pada router tanpa memicu-port.