Catatan: Ini adalah pertanyaan tentang jaringan, bukan game. Saya menggunakan StarCraft hanya sebagai contoh.
Permainan StarCraft (tidak StarCraft 2) mendukung bermain online. Satu host orang, dan orang lain bergabung. Jika tuan rumah pergi selama pertandingan, permainan dapat berlanjut tanpa batas waktu tanpa tuan rumah. Bagaimana cara kerjanya?
Pertimbangkan skenario berikut:
- Saya meng-host 3 lawan 3. Perhatikan bahwa, agar orang-orang dapat bergabung, router saya harus dikonfigurasikan ke port forward 6112, TCP dan UDP (lihat Dukungan Blizzard ).
- Lima orang bergabung. Semua orang (termasuk saya) ada di belakang router. Saya memulai permainan.
- Tiga menit ke dalam permainan, sekitar dua puluh fanatik mengalir ke pangkalan saya. Tidak ada yang membantu saya.
- Basis saya dihilangkan, jadi saya pergi (permainan tidak memberi Anda pilihan).
- Permainan berlanjut tanpa tuan rumah (tim tuan rumah memiliki dua pemain tersisa).
Bagaimana lima klien yang tersisa (yang tidak perlu diteruskan 6112) tetap terhubung?
Jika saya mengerti benar: jika dua program ingin berbicara satu sama lain, salah satunya harus menjadi "server" dan mendengarkan koneksi pada port, sedangkan yang lain harus menjadi "klien" dan memulai permintaan koneksi pada itu Pelabuhan. Mereka tidak bisa begitu saja mulai mengirim paket satu sama lain (dan saya bahkan tidak tahu bagaimana mereka akan melakukannya, jika keduanya berada di belakang router).
Seseorang yang meng-hosting game adalah server, sementara mereka yang bergabung adalah klien. Sangat mudah untuk melihat bagaimana klien dapat mulai berkomunikasi dengan server. Yang tidak saya dapatkan adalah: bagaimana cara klien mulai berkomunikasi satu sama lain tanpa melalui server? Apakah Protokol Internet memungkinkan server untuk memulai koneksi antara klien?
Sangat mungkin bahwa, dalam kasus StarCraft, lalu lintas game melewati server Battle.net. StarCraft mempertahankan koneksi ke Battle.net selama pertandingan (untuk pesan dari teman, dll.). Namun, saya ragu lalu lintas game melewatinya, karena jika itu terjadi, mengapa tuan rumah perlu melakukan port forward 6112?
Pertanyaan saya adalah: dapatkah server, dengan beberapa klien terhubung, memulai koneksi di antara mereka?
sumber
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
Tampaknya ini diperlukan untuk memulai permainan agar pengguna dapat menemukan Anda, tetapi tidak diharuskan untuk tetap terhubung.Jawaban:
Kedengarannya seperti lubang meninju UDP
Dalam contoh ini, Anda adalah S. Lawan Anda adalah A dan B. Ketika Anda ditendang dari permainan, lawan Anda dapat terus bermain karena mereka telah menegosiasikan koneksi satu sama lain ketika mereka pertama kali terhubung dengan Anda.
sumber
Jika dua program ingin berbicara satu sama lain, yang satu tidak perlu menjadi server dan yang lain sebagai klien. Itu salah satu model jaringan, tetapi bukan satu-satunya. Model lain yang sangat umum adalah model peer-to-peer , di mana setiap orang adalah klien dan server dan siapa pun dapat berbicara dengan siapa pun. Saya tidak tahu terlalu banyak tentang internal Starcraft multiplayer internal internal, tapi saya kira itu kemungkinan besar akan menyelesaikan apa yang Anda gambarkan dengan menggunakan model peer-to-peer.
sumber