Je sais que cette question est un peu datée à ce stade ... Je pense qu'il est très important de mentionner que cela dépend de ce à quoi ressemble votre environnement client / serveur.
Si vous passez des octets plusieurs fois sans inspection, par exemple avec un système de file d'attente de messages ou des entrées de journal en streaming sur disque, vous préférerez peut-être un codage binaire pour souligner la taille compacte. Sinon, c'est un problème au cas par cas avec différents environnements.
Certains environnements peuvent avoir une sérialisation et une désérialisation très rapides vers / depuis msgpack / protobuf, d'autres pas tellement. En général, plus le langage / environnement est de bas niveau, meilleure sera la sérialisation binaire. Dans les langages de niveau supérieur (node.js, .Net, JVM), vous verrez souvent que la sérialisation JSON est en fait plus rapide. La question est alors de savoir si la surcharge de votre réseau est plus ou moins contrainte que votre mémoire / processeur?
En ce qui concerne msgpack vs bson vs tampons de protocole ... msgpack est le moins d'octets du groupe, les tampons de protocole étant à peu près les mêmes. BSON définit des types natifs plus larges que les deux autres, et peut être une meilleure correspondance avec votre mode objet, mais cela le rend plus verbeux. Les tampons de protocole ont l'avantage d'être conçus pour diffuser ... ce qui en fait un format plus naturel pour un format de transfert / stockage binaire.
Personnellement, je pencherais vers la transparence qu'offre directement JSON, à moins qu'il n'y ait un besoin clair de trafic plus léger. Sur HTTP avec des données gzippées, la différence de surcharge du réseau est encore moins un problème entre les formats.