2010-11-16 4 views
0

J'ai une application serveur que je réécris en C++ et qui utilisait XML pour envoyer des données à un client/d'un client. J'ai trouvé que c'était très difficile d'implémenter XML, même en utilisant des bibliothèques existantes. Il semble que c'est juste contre-intuitif parfois et la bibliothèque C++ que j'ai utilisée semble tellement compliquée. Je me demandais si quelqu'un connaissait de meilleures façons d'envoyer des données de client à serveur et de revenir de manière plus simple et plus intuitive, puis d'analyser XML. Les données sont principalement composées uniquement de types de base. Je pensais peut-être juste utiliser une structure avec les types de données nécessaires et juste l'envoyer sur une socket raw. J'ai perdu tellement de temps là-dessus, c'est irréel.Remplacement XML

Répondre

3

Je voudrais essayer JSON ou tampons de protocole de Google pour voir si elles fonctionnent pour vous.

+0

Cela donne une bonne comparaison des tampons de protocole vs DBus http://lists.freedesktop.org/archives/dbus/2009-September/011786.html – CashCow

2

Je considérerais DBus comme le protocole, car il est plutôt standard.

7

Comme duffymo dit, JSON est parfaitement adapté à ce que vous essayez de faire. Pour ajouter à sa réponse, il a une représentation saine dans de nombreux langages (je sais que XML le fait aussi, mais le point ici est que le PO trouve que XML est pénible pour les types de données simples).

Vous pouvez en savoir plus sur JSON au http://www.json.org/. Au bas de cette page se trouvent des liens vers des implémentations pour différents langages (y compris C++, par exemple: http://sourceforge.net/projects/jsoncpp/).

En termes simples, JSON est synonyme de JavaScript Object Notation et constitue un moyen simple de décrire des objets. Une adresse pourrait être respresented par:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
} 

Les tableaux sont pris en charge:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
    "occupants": ["olivia", "newton", "john"] 
} 

et des objets plus complexes:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
    "occupants": [{"name" : "Olivia", 
        "age" : 24 
       },{"name" : "Newton", 
        "age" : 32 
       },{"name" : "John", 
        "age" : 42} 
       ] 
} 

EDIT: erreur de syntaxe :)

+1

Je trouve que JSon gagne contre XML sur tous les points. C'est vraiment facile à lire/écrire, puisqu'il n'y a pas d'entités json à proprement parler, c'est aussi très concis (pas de redondance des tags) grâce à sa syntaxe allégée. –

0

Il y a quelques alternatives en fonction de ce que votre besoin est. Il est clair que Google Protobuf est la meilleure alternative pour le transfert de données réseau axé sur les performances. Cependant, il est nettement moins facile à utiliser que tout autre alternative que je vais vous donner parce qu'il est fait clairement être efficace, non lisible par l'homme, etc.

Pour les données lisibles par l'homme, il y a:

  • JSON
  • YAML (alsmot toutes les langues ont au moins une implémentation de l'analyseur)
  • format INFO fourni par boost :: property_tree
+0

Je ne dirais pas que les tampons de protocole sont clairement moins faciles à utiliser. Je pense que le fait que vous obteniez des classes personnalisées le rend beaucoup plus facile à utiliser. En outre, la bibliothèque de tampon de protocole prend également en charge un format de texte équivalent (que vous pouvez utiliser pour votre communication réelle si vous le souhaitez, ou simplement pour le débogage). –

+0

Je comparais en utilisant un tel outil de bas niveau qui a besoin de la génération de code, comparé au format de texte lisible par l'homme. Mais je suis d'accord. – Klaim

0

Si tout ce que vous faites est d'envoyer des données sur un réseau - vous n'avez pas besoin d'une représentation de texte modifiable telle que XML ou JSON - alors regardez boost :: serialization.