Cara Mengurangi Network Latency dengan Netcode Multiplayer yang Tepat

Ping 70 ms tidak bisa secara ajaib diubah menjadi 5 ms hanya dengan kode yang lebih bagus. Namun developer masih bisa membuat game dengan koneksi tersebut terasa jauh lebih responsif.

Inilah peran netcode. Client prediction, interpolation, server reconciliation, dan lag compensation membantu menyembunyikan sebagian delay alami jaringan tanpa menyerahkan otoritas permainan kepada client.

Karena itu, Cara Mengurangi Network Latency pada competitive multiplayer sebenarnya memiliki dua sisi: memperbaiki jaringan fisik sekaligus mengurangi dampak latency yang dirasakan pemain melalui desain networking yang tepat.

Bedakan Physical Latency dan Perceived Latency

Pertama, pahami bahwa netcode tidak dapat menghapus waktu perjalanan packet.

Jika packet membutuhkan 40 ms menuju server, kode tidak dapat membuat informasi tersebut tiba kemarin.

Yang bisa dilakukan developer adalah menghindari pemain menunggu seluruh perjalanan itu sebelum melihat respons.

Contohnya, ketika pemain menekan tombol maju, client dapat langsung menjalankan movement secara lokal daripada menunggu konfirmasi server.

Server tetap menjadi authoritative source.

Ketika input akhirnya sampai, server menjalankan movement yang sama dan mengecek apakah state client masih sesuai.

Unreal Engine menggunakan pola tersebut pada Character Movement Component: client memproses movement lokal, menyimpan move, mengirimnya ke server, lalu server mereproduksi dan melakukan koreksi jika hasilnya berbeda.

Inilah dasar client-side prediction.

Gunakan Client Prediction untuk Kontrol Pemain Lokal

Tanpa prediction, pemain dengan RTT 100 ms dapat merasakan karakter mulai bergerak setelah menunggu perjalanan input menuju server dan respons kembali.

Pada game kompetitif, delay seperti itu terasa sangat buruk.

Dengan client prediction, karakter bergerak segera.

Client menyimpan history input seperti:

Move Forward → Jump → Move Left

Server kemudian menerima urutan tersebut dan menjalankan simulation authoritative.

Jika hasil client dan server sama, tidak ada masalah.

Jika berbeda, server memberikan correction dan client menjalankan kembali input yang belum dikonfirmasi.

Dokumentasi Unreal menjelaskan bahwa saved moves yang belum di-ACK dapat diputar kembali setelah client menerima koreksi posisi.

Teknik ini mengurangi perceived input lag tanpa membuat client menjadi sumber kebenaran.

Gunakan Server Reconciliation tanpa Membuat Karakter Teleport

Prediction tidak selalu tepat.

Packet loss, collision berbeda, physics, atau pemain curang dapat membuat posisi client menyimpang dari server.

Jika setiap perbedaan langsung dikoreksi dengan teleport, movement terasa patah-patah.

Gunakan reconciliation serta smoothing.

Unreal, misalnya, memiliki proses server-client error checking dan hanya mengirim adjustment ketika perbedaannya cukup signifikan.

Dokumentasinya juga menjelaskan bahwa koreksi yang terlalu sering dapat menambah bandwidth dan menyebabkan client melakukan resimulation berulang.

Toleransi koreksi harus disesuaikan dengan genre.

Game dengan movement presisi membutuhkan threshold berbeda dari MMORPG santai.

Jangan pula memberikan toleransi terlalu besar karena pemain dapat melihat posisi yang jauh berbeda dari state authoritative.

Gunakan Interpolation untuk Pemain Lain

Prediction cocok untuk karakter lokal karena client mengetahui input yang baru saja dilakukan.

Masalahnya, client tidak mengetahui tombol apa yang akan ditekan lawan satu milidetik ke depan.

Karena itu, remote player biasanya menggunakan interpolation.

Client menyimpan beberapa snapshot server dalam buffer kecil, kemudian menampilkan posisi di antara snapshot tersebut.

Hasilnya terlihat lebih mulus daripada langsung menggambar setiap update yang datang.

Valve menjelaskan bahwa Source networking menggunakan interpolation untuk mengatasi interval antara snapshot dan variasi kedatangan packet.

Dokumentasi tersebut juga menunjukkan bahwa interpolation memperkenalkan sedikit view delay yang kemudian perlu diperhitungkan oleh sistem lag compensation.

Jangan Membuat Interpolation Buffer Terlalu Besar

Buffer besar menyerap jitter dengan baik.

Tetapi konsekuensinya pemain melihat dunia lebih jauh di masa lalu.

Buffer 100 ms berarti karakter lawan yang ditampilkan kurang lebih merupakan state lama dibanding server.

Karena itu, cari nilai minimum yang masih mampu menahan jitter normal.

Dynamic interpolation juga dapat dipertimbangkan: ketika jaringan stabil, buffer diperkecil; ketika jitter naik, sedikit tambahan buffer digunakan untuk menjaga motion tetap konsisten.

Konfigruasi ini harus berdasarkan telemetry, bukan feeling.

Terapkan Lag Compensation untuk Hit Detection

Competitive shooter memiliki masalah klasik.

Pemain menembak tepat ke lawan yang terlihat di layar, tetapi saat command sampai ke server, lawan sudah bergerak.

Tanpa mekanisme tambahan, server mengatakan tembakan meleset.

Lag compensation mencoba mengevaluasi aksi sesuai keadaan dunia ketika pemain melakukan input.

Valve menjelaskan implementasi Source yang menyimpan history posisi pemain.

Ketika command tembakan diterima, server memperkirakan waktu eksekusi input, mengembalikan posisi pemain lain ke state historis yang relevan, melakukan hit detection, lalu mengembalikan dunia ke kondisi saat ini.

Teknik ini dapat membuat shooting terasa lebih fair bagi pemain dengan latency.

Namun ada trade-off.

Dari sisi target, pemain terkadang bisa merasa terkena tembakan setelah sudah masuk cover karena penembak melihat state dunia yang sedikit lebih lama.

Karena itu, batasi rewind window agar latency ekstrem tidak mendapatkan keuntungan berlebihan.

Kirim State yang Relevan Saja

Bandwidth berlebihan dapat menyebabkan queueing dan menambah latency.

Karena itu, jangan mengirim semua entity kepada semua pemain dengan frequency yang sama.

Gunakan relevancy atau interest management.

Pemain membutuhkan update sangat detail untuk musuh yang berada di dekatnya, tetapi mungkin hanya membutuhkan state kasar untuk objek jauh.

Movement bisa menggunakan update lebih sering. Cosmetic animation tertentu bisa dikirim lebih jarang atau direkonstruksi dari state lain.

Valve menjelaskan bahwa server menggunakan snapshot karena keterbatasan bandwidth membuatnya tidak praktis mengirim setiap perubahan dunia secara individual kepada semua client.

Unreal juga menggabungkan saved move serupa sebelum dikirim agar mengurangi strain terhadap bandwidth.

Optimization network traffic bukan hanya menghemat biaya. Ia juga membantu menghindari packet queue.

Atasi Packet Loss Tanpa Menunggu Semua Retransmission

Pada game real-time, packet lama sering kehilangan nilainya.

Bayangkan update posisi lawan pada tick 100 hilang, sementara tick 101 sudah diterima.

Menunggu tick 100 dikirim ulang sebelum memproses tick 101 dapat menambah delay tanpa keuntungan besar.

Gunakan unreliable delivery untuk state yang terus diperbarui, sedangkan pesan yang benar-benar penting memakai reliability.

Event seperti pembelian item atau perubahan inventory perlu delivery yang kuat.

Update aim angle mungkin tidak.

Pisahkan channel berdasarkan sifat data.

Steam Networking Sockets menyediakan API networking yang dibangun untuk traffic game dan mendukung koneksi melalui jaringan Valve maupun UDP langsung. Dokumentasinya juga menyediakan informasi RTT serta packet gap untuk membantu debugging kondisi jaringan.

Penggunan reliability yang selektif membantu menjaga latency lebih rendah ketika packet loss terjadi.

Optimalkan Jitter, Bukan Hanya Ping

Dua pemain dengan average ping 40 ms bisa mendapatkan pengalaman berbeda.

Pemain A stabil antara 38–42 ms.

Pemain B berubah antara 15–100 ms.

Pemain B menghadapi jitter tinggi sehingga snapshot tiba dengan interval tidak konsisten. Client harus menggunakan buffer lebih besar dan prediction error bisa meningkat.

Karena itu, dashboard network perlu melacak RTT variance, packet loss, out-of-order packet, serta correction rate.

Steam Networking memiliki konfigurasi dan logging untuk RTT calculation, packet gaps, dan relay ping yang dapat membantu menganalisis kualitas koneksi.

Jangan hanya memunculkan satu angka “Ping: 40 ms”.

Bagi developer, kualitas koneksi adalah distribusi, bukan satu nilai.

Pilih Server Berdasarkan Pengukuran UDP Nyata

Geolocation IP tidak cukup untuk menentukan region terbaik.

Pemain di satu kota bisa memakai dua ISP dengan routing internasional sangat berbeda.

Lebih baik ukur latency langsung menuju beberapa lokasi server.

Amazon GameLift menyediakan UDP ping beacon untuk tujuan ini dan secara eksplisit menyebut hasil UDP dapat lebih representatif dibanding ICMP karena game server umumnya menggunakan UDP.

Matchmaker kemudian dapat memilih region berdasarkan kombinasi ping seluruh anggota party.

Jangan hanya mengejar average rendah.

Satu pemain dengan latency 250 ms sementara tujuh lainnya 30 ms tetap dapat memengaruhi fairness match.

Gunakan batas maksimum individual bersama average latency.

AWS GameLift mendukung latency policies yang dapat menolak lokasi ketika satu pemain melewati batas yang ditentukan.

Simulasikan Kondisi Jaringan Buruk sebelum Rilis

Testing di LAN kantor tidak menggambarkan internet nyata.

Developer perlu mencoba latency 50, 100, bahkan 200 ms bersama jitter dan packet loss.

Valve Source menyediakan contoh tool seperti net_fakelag pada environment development untuk menguji kondisi latency tertentu. Engine dan networking framework lain biasanya memiliki network simulation atau developer tooling serupa.

Buat scenario seperti:

20 ms ping + 0% loss, kemudian 80 ms + 1% loss, dan 120 ms + jitter tinggi.

Perhatikan movement correction, hit registration, teleport, animation, dan feel input.

Lakukan pengujan pada kondisi terburuk yang masih ingin didukung.

Netcode yang hanya terasa bagus pada 10 ms bukan netcode multiplayer global yang siap produksi.

Cara Mengurangi Network Latency tidak berhenti pada memilih server terdekat.

Client prediction, reconciliation, interpolation, lag compensation, packet prioritization, dan pengelolaan jitter membantu mengurangi dampak delay yang dirasakan pemain.

Bangun netcode berdasarkan server authoritative, lalu simulasi kondisi jaringan buruk sejak awal. Ukur correction, packet loss, dan p95 latency agar multiplayer tetap cepat sekaligus fair.