Anda hanya membutuhkan sekitar 30 pembaruan (atau bahkan kurang dari 10 atau 20) per detik. interpolasi posisi objek yang bergerak di sisi klien. Secara umum Anda hanya boleh mengirim data ketika itu SANGAT dibutuhkan. Di WoW Anda mungkin menerima lebih banyak pembaruan dari para pemain yang berada dalam grup dengan Anda daripada dari para pemain yang berada di lokasi yang sama. Juga, jika pemain lain jauh dari Anda, Anda tidak menerima banyak pembaruan per detik tentang dia.
Kemudian, hanya kirim satu snapshot lengkap ke setiap pemain saat dia terhubung. Setelah itu hanya mengirim perubahan objek game. Jika tidak ada perubahan, jangan kirim.
Kemudian, gunakan BitVectors dengan berat atau setiap kali Anda memanggilnya untuk mengurangi jumlah data yang tidak dibutuhkan! Contoh: Anda juga dapat mencoba menulis float menggunakan hanya satu byte (dalam rentang dari 0 hingga 1 atau -1 hingga 1) sehingga Anda hanya memiliki 256 atau 128 nilai yang berbeda. Tapi pemain tidak akan melihat gerakan tersentak-sentak berkat interpolasi.
Lihat ini sebagai contoh dengan LidgrenLibrary tentang cara mengompres data: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
Berikutnya: Coba kurangi radius tampilan pemain saat mereka bergerak, dan hanya kirimkan informasi penting pada waktu itu. Kemudian ketika mereka berhenti meningkatkan radius tampilan mereka lagi. Anda dapat menggunakan sistem hashing spasial atau pohon bsp untuk mengurangi overhead mencari objek yang "dalam jangkauan". Ini adalah bacaan yang bagus untuk topik: http://en.wikipedia.org/wiki/Collision_detection
Kompres data DIRI ANDA sendiri hanya ANDA yang tahu tentang struktur data dan koherensi temporal dalam data (yang dapat dan harus dieksploitasi). Algoritma umum seperti Bzip2, Deflate, apa pun, harus digunakan, tetapi hanya sebagai tahap akhir kompresi!
Selain itu, untuk informasi yang tidak penting untuk permainan, Anda juga bisa menggunakan teknik P2P tambahan. Contoh: Seorang pemain memainkan animasi "halo". (Hanya efek grafis) Pemain mengirim informasi ini ke server, tetapi server tidak menyampaikan informasi tersebut ke pemain lain. Alih-alih ini efek non-kritis dikirim oleh pemain itu sendiri ke klien lain dalam jangkauan.
EDIT (karena komentar):
Metode tambahan untuk mengurangi jumlah bit rata-rata per detik untuk setiap pemain:
Anda menulis bahwa Anda mengirim "Objek tidak berubah". Tidak ada alasan untuk melakukan ini. Jika Anda khawatir tentang kehilangan paket (dan membuat simulasi Anda tidak sinkron karena hal ini) pertimbangkan hal berikut: Pada setiap catatan waktu tetap (mis. 100, 200, 300, 400 ...) hash kondisi simulasi dan kirimkan ke server . server mengkonfirmasi atau mengirim snapshot lengkap dari semua data kembali.
Untuk hal-hal seperti roket atau bahkan pemain Anda dapat menggunakan tidak hanya interpolasi tetapi juga ekstrapolasi untuk membuat simulasi lebih realistis. Contoh 'Rocket': Alih-alih memperbarui dengan pesan seperti "Apakah sekarang di posisi x" hanya mengirim pesan sekali berisi yang berikut: "Rocket Spawned: position (vector), Time (di mana simulasi langkah roket itu muncul), kecepatan ( vektor) ". Jadi Anda bahkan tidak perlu memasukkan rotasi karena ujungnya akan selalu berada di arah "kecepatan".
Gabungkan beberapa perintah dalam satu pesan dan jangan pernah mengirim pesan yang lebih kecil dari 16-20 byte karena header udp akan lebih besar dari pesan itu sendiri. Juga jangan mengirim paket yang lebih besar dari MTU protokol Anda karena fragmentasi akan memperlambat kecepatan transmisi.