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?
networking
multiplayer
peer-to-peer
Tuomas Hietanen
sumber
sumber
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.
sumber
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.
sumber
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:
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.
sumber
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!
sumber
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.
sumber
Anda mungkin juga ingin memeriksa Badumna (www.badumna.com) yang mengklaim sebagai solusi jaringan peer-to-peer untuk game online. Tampaknya melakukan sinkronisasi keadaan permainan secara terdistribusi dan menurut situs web mereka ada versi Flash yang akan datang.
sumber
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.
sumber
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.
sumber
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.
sumber