2010-02-02 14 views
5

Tengo dos aplicaciones separadas, una por cliente (en C#) y otra por servidor (en C++). Necesitan intercambiar datos en forma de "estructuras" y ~ alrededor de 1 MB de datos por minuto se envía de servidor a cliente.¿Debo usar XML o Binary para enviar datos del servidor al cliente?

¿Cuál es mejor usar XML o mi propio formato binario?

Con XML:

  • XML Traduciendo a una estructura utilizando un programa de análisis sería lenta creo? ("Bueno", pero: analizador de carga, cargar XML, analizar)
  • La otra opción es analizar XML con expresiones regulares

Con binario (mal):

  • de datos compacta tamaños
  • sin necesidad de metainformación como etiquetas;
  • pero las estructuras no se pueden cambiar fácilmente para acomodar nuevas estructuras/nuevos miembros en las estructuras en el futuro;
  • ninguna conversión de texto (XML) a binario (struct) necesario para que es más rápido para recibir y "montar" en una estructura)

Cualquier punteros? ¿No debería considerar el binario en absoluto? Un poco confundido acerca de qué enfoque tomar.

+1

¿Qué pasa con JSON. Documentamos todas nuestras interfaces como XML pero tenemos un método estándar (solo en documentos) para XML -> transformación JSON. Entonces nuestros servicios pueden solicitar XML o JSON. Por lo general, XML cuando se depura y JSON para la eficiencia. –

Respuesta

7

1 MB de datos por minuto es bastante pequeño si tiene una conexión de red razonable.

Existen otras opciones entre binario y XML: otros formatos de serialización de texto legibles por el ser humano, como JSON.

Cuando se trata de binario, no tienen tener problemas de versiones - tecnologías como Protocol Buffers (soy parcial: Yo trabajo para Google y he ported PB to C#) están diseñados de manera explícita con la compatibilidad hacia atrás y hacia adelante en mente. También hay otros formatos binarios a considerar, como Thrift.

Sin embargo, si estás preocupado por el rendimiento, realmente deberías medirlo. Estoy bastante seguro de que mi teléfono se pudo analizar el 1 MB de XML con la suficiente rapidez como para que no sea un problema en este caso ... básicamente trabajar con lo que está más preocupado, en términos de:

  • simplicidad de código
  • interoperabilidad
  • rendimiento en términos de CPU
  • tráfico
  • Red
  • atrás/adelante compatibilidad
  • legibilidad humana del formato en el alambre

Todo es un acto de equilibrio, pero usted es el que tiene que decidir cuánto peso dar a cada uno de esos factores.

2

Si tiene aplicaciones .NET en ambos extremos, use Windows Communication Foundation. Esto le permitirá diferir la decisión hasta el momento del despliegue, ya que admite la serialización binaria y XML.

+0

Hola, actualicé la pregunta. El cliente está en C# y el servidor está en C++. – Liao

+1

Ahora hay una biblioteca nativa de Windows para WCF. Busque "Servicios web de Windows" –

+0

@Nemanja: ¿Windows Web Services es compatible con XML binario? –

1

Un buen punto para XML sería la interoperabilidad. ¿Tiene otros clientes que también tienen acceso a su servidor?

Antes de usar su propio formato binario o hacer regex en XML ... ¿Ha considerado el espacio de nombres de serialización en .NET? Hay formateadores binarios, formateadores SOAP y también hay XmlSerialization.

2

Como dijiste, XML es (un poco) más lento pero mucho más flexible y confiable. Me gustaría ir con XML hasta que haya un problema probado con el rendimiento.

También debería echar un vistazo a ProtoBuff como alternativa.

Y, después de su actualización, cualquier requisito de idioma cruzado, multiplataforma y entre versiones apunta fuertemente lejos del formato binario.

0

text/xml

  • legible
  • más fácil de depurar
  • ancho de banda puede ser salvado mediante la compresión
  • etiquetas del documento los datos que contienen

binaria

  • compacto
  • fácil de analizar (si se utilizan campos de tamaño fijo, simplemente superponer una estructura)
  • difíciles de depurar (editores hexadecimales son un dolor)
  • Necesita un documento separado para entender lo que el los datos son

Ambos formularios son extensibles y pueden actualizarse a versiones más nuevas siempre que inserte un tipo y un campo de versión al comienzo del datagrama.

1

Otra ventaja de un XML es que puede ampliar los datos que está enviando agregando un elemento, no tendrá que modificar el código del receptor para hacer frente a los datos adicionales hasta que esté listo.

También la compresión mínima (rápida) de XML puede reducir drásticamente la carga de cable.

0

usted no dijo si están en la misma máquina o no. Supongo que no.

En ese caso, entonces hay otro inconveniente de binario. No puedes simplemente volcar las estructuras en el cable, podrías tener problemas de endianness y sizeof.

XML es muy prolijo, YAML o JSON son mucho más pequeños

0

No se olvide que lo que la mayoría de la gente considera como XML es XML serializado como texto. Se puede serializar a binario en su lugar.Esto es lo que el netTcpBinding y otras vinculaciones similares hacen en WCF. El infoset XML se envía como binario, no como texto. Sigue siendo XML, solo en binario.

Cuestiones relacionadas