Solo necesita unas 30 actualizaciones (o incluso menos, tal vez 10 o 20) por segundo. interpolar las posiciones de los objetos en movimiento del lado del cliente. En general, solo debe enviar datos cuando sea REALMENTE necesario. En WoW puede recibir más actualizaciones de los jugadores con los que está en un grupo que de los jugadores que están en la misma ubicación. Además, si otro jugador está lejos de ti, no recibes tantas actualizaciones por segundo sobre él.
Luego, solo envíe una instantánea completa a cada jugador cuando se conecte. Después de eso solo envía los cambios de los objetos del juego. Si no se produjo ningún cambio, no lo envíe.
Luego, ¡haga un uso intensivo de BitVectors o de cómo los llame para reducir la cantidad de datos innecesarios! Ejemplo: También puede intentar escribir un flotante usando solo un byte (en un rango de 0 a 1 o -1 a 1) para que solo tenga 256 o 128 valores diferentes. Pero el jugador no notará ningún movimiento brusco gracias a las interpolaciones.
Mira esto para ver un ejemplo con LidgrenLibrary sobre cómo comprimir datos: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
A continuación: intente reducir el radio de visión de los jugadores mientras se mueven, y solo transmita información importante en ese momento. Luego, cuando dejen de aumentar su radio de visión nuevamente. Puede usar un sistema de hashing espacial o un árbol bsp para reducir la sobrecarga de buscar objetos que están "dentro del rango". Esta es una buena lectura para el tema: http://en.wikipedia.org/wiki/Collision_detection
Comprima también los datos USTED MISMO, solo USTED conoce la estructura de datos y la coherencia temporal en los datos (que pueden y deben explotarse). Debe usarse un algoritmo general como Bzip2, Deflate, lo que sea, ¡pero solo como la etapa final de compresión!
Además, para obtener información que no sea crítica para el juego, también puede emplear técnicas P2P adicionales. Ejemplo: un jugador reproduce la animación "hola" (solo un efecto gráfico). El jugador envía esta información al servidor, pero el servidor no transmite la información a los otros jugadores. En cambio, este efecto no crítico es enviado por el propio jugador a los otros clientes dentro del alcance.
EDITAR (por el comentario):
Métodos adicionales para disminuir el conteo de bits promedio por segundo para cada jugador:
Usted escribió que envía "El objeto no cambió". No hay razón para hacer esto. Si le preocupa la pérdida de paquetes (y la sincronización de su simulación debido a esto) considere lo siguiente: En cada paso fijo (por ejemplo, 100, 200, 300, 400 ...), controle el estado de la simulación y envíelo al servidor . el servidor confirma o envía una instantánea completa de todos los datos.
Para cosas como cohetes o incluso jugadores, puede emplear no solo interpolación sino también extrapolación para hacer que la simulación sea más realista. Ejemplo 'Cohete': en lugar de actualizar con mensajes como "Ahora está en la posición x", simplemente envíe un mensaje que contenga lo siguiente: "Cohete generado: posición (vector), Tiempo (en el paso de simulación que se generó el cohete), velocidad ( vector)". Por lo tanto, ni siquiera tiene que incluir la rotación porque la punta siempre estará en la dirección de "velocidad".
Combine múltiples comandos en un mensaje y nunca envíe mensajes de menos de 16-20 bytes porque el encabezado udp será más grande que el mensaje en sí. Tampoco envíe paquetes más grandes que la MTU de su protocolo porque la fragmentación reducirá la velocidad de la transmisión.