No acepte simplemente una respuesta directa "sí o no porque lo dije" aquí, ya que puede estar abriéndose a tener que luchar contra un montón de problemas con UDP que en realidad no necesita enfrentar.
Ninguna de las otras respuestas aquí indica la forma obvia de probar esto.
Toma algunos hechos simples
- Un encabezado IP tiene 20 bytes sin importar el protocolo que use.
- Los encabezados UDP son de 4 bytes
- Los encabezados TCP son de 20 bytes
Por lo tanto, cada vez que envía un mensaje de 1 byte en la línea, realmente ha enviado 25 o 41 bytes, según el protocolo, suponiendo que también se necesita un encabezado IP.
fuentes:
Mi consejo
Tome su situación en la que necesita la interacción del servidor del cliente, calcule el número de clientes y luego haga los cálculos en función de los datos que realmente envía entre los 2.
Un ejemplo
Digamos que envío 10 mensajes que son 1 byte cada uno por actualización en mi juego y estoy actualizando alrededor de 60 fps, así que necesito enviar 60 * 10 = 600 bytes por segundo de datos de mensajes reales + los encabezados relevantes.
Ahora, dependiendo del juego, podría enviarlo todo como un solo mensaje, por lo que mi sobrecarga de la capa TCP es de solo 40 bytes (efectivamente, un costo sobre UDP de 20 bytes por segundo), no tener esa sobrecarga es un costo potencial de 600 bytes ( porque puede que tenga que volver a enviar toda la secuencia de mensajes
Sin embargo, si es de vital importancia que cada mensaje se envíe por sí solo en el mismo instante en que está listo para ser enviado, tengo 600 mensajes (también 600 bytes) + 40 * 600 = 24k de sobrecarga TCP o ~ 14k de sobrecarga UDP por segundo + 600 bytes de datos del mensaje.
Una vez más, hacemos las preguntas, ¿qué tan vitales son esos mensajes, qué tan frecuentes son y si se pueden agrupar de alguna manera para reducir los gastos generales?
Eso se basa solo en un montón de mensajes de un solo byte, por lo general, haría algo muy diferente, pero sin saber que los datos sin procesar se envían es difícil de probar de cualquier manera si TCP se ajusta mejor a su situación que UDP.
Entonces, ¿funcionará?
Bueno, si tiene un fps típico y la posición es importante (para evitar trampas o decisiones incorrectas), debe saber que su transmisión de red es confiable, pero 32 reproductores transmiten cada uno más de 24k bytes de mensajes de ida y vuelta (por lo tanto, 768KB / s + mensajes) ... se trata de una línea de banda ancha de 10 mb / s solo para encabezados individuales basados en el envío de al menos 1 mensaje por cuadro de cada cliente a todos los demás clientes a través de un servidor.
Obviamente, no codificará su servidor y cliente para que funcionen de esa manera y es muy probable que los tamaños de los mensajes sean mucho más grandes y probablemente un poco menos frecuentes que 1 byte por cuadro en la mayoría de las situaciones, por lo que es difícil de decir sin ver un mundo real Ejemplo de "esta es la información que necesito enviar".
Mi caso
En mi caso, hice la llamada de que es una sobrecarga razonable, pero eso se basa en cómo construyo mis flujos de mensajes para que no tenga grandes gastos generales en comparación con algunos diseños.
TCP funciona bien y tengo un servidor MMO escalable y un marco de cliente, pero no necesito transmitir una gran cantidad de datos o muchos paquetes pequeños porque puedo agrupar mis llamadas.
para otros: TCP simplemente no funciona, y solo pueden usar UDP, pero tienen que aceptar que no les dará garantías sobre lo que obtienen (pedido / garantía de llegada).
Otras Consideraciones
Muchos motores de juegos mal codificados manejan todo en el hilo principal de la CPU, por lo que a la CPU a menudo solo se le da una cantidad muy pequeña de tiempo para manejar el código de red, una implementación decente tanto del servicio como del cliente sería completamente asíncrona y posiblemente presionar y extraer mensajes en lotes.
Hay algunas buenas bibliotecas de redes, pero como se ve aquí, muchas parecen tener la opinión de que UDP es "simplemente mejor", tenga en cuenta primero sus propias necesidades y ese puede no ser el caso, y encontrar una biblioteca que no Tenga en cuenta las cosas de la manera en que lo hace puede dar como resultado una configuración de TCP mal codificada en comparación con la variante UDP en la misma biblioteca (solo digo que he visto esto y las pruebas de carga lo han demostrado).
Cree algo primero, una base técnica de los datos que desea enviar y pruébelo, luego haga los cálculos para escalarlo, en el peor de los casos, pruébelo al implementarlo en una nube y haga que 50 computadoras ejecuten un cliente de prueba para ver si puede manejar su límite de 32 jugadores por juego (o los límites que pueda tener).