Estoy considerando mover partes de una aplicación .Net a otras computadoras. La forma obvia de hacerlo es simplemente usar WCF con un protocolo tcp binario, por ejemplo como descriptor en "Easiest way to get fast RPC with .NET?".Manera optimizada para hacer RPC en .Net
Voy a hacer una gran cantidad de llamadas y la latencia es un gran problema. Básicamente, una computadora ejecutará un simulador de física y las demás interactuarán con una API de varios cientos de comandos.
Estoy pensando que la mejor manera es hacer un protocolo binario personalizado donde los comandos API se identifiquen mediante int16 y un número de secuencia, y luego siga los parámetros requeridos. Cablear las clases de enviar y recibir eliminaría cualquier sobrecarga innecesaria.
Pero eso es MUCHO trabajo ya que estamos hablando de varios cientos de comandos API.
¿Alguna idea sobre la mejor manera de implementarla?
Edit: Para aclarar: la serialización de AFAIK en .Net no está optimizada. Hay una penalización relativamente alta al serializar y deserializar objetos en, por ejemplo, el uso interno de Reflection. Esto es algo de lo que quiero evitar, y de ahí mi pensamiento acerca de los métodos de mapeo directo (cableado).
Después de buscar encontré una aplicación que tenía un vago recuerdo de: http://www.protocol-builder.com/
Usted dice que la * latencia * es un gran problema, pero la latencia está bastante arreglada. ¿* Ancho de banda * es tu cuello de botella aquí? Puedo sugerir maneras de reducir el ancho de banda dentro de WCF si desea un compromiso entre la conveniencia de WCF y el rendimiento de un protocolo personalizado ... –
Con latencia me refiero al tiempo que toma desde un evento de física (como una colisión, que podría estar en los miles "al mismo tiempo") para ser procesado y actuado. (Sí, tendré que limitar el número de eventos también). –
una manera efectiva de reducir el costo de eso es enviar un solo mensaje con una carga útil más grande. Lo que se relaciona con la reducción del ancho de banda. Soy bastante aficionado a cambiar el serializador, por ejemplo (DataContractSerializer no es conocido por ser concisa) –