Буферы протокола Google или что-то подобное для .net / javascript - PullRequest
3 голосов
/ 15 июля 2009

В настоящее время мы используем вызовы Ajax для веб-службы .net, которая затем возвращает объект Json клиенту. Некоторые из этих объектов Json довольно массивны (более 500 тыс. Несжатых). Мы слышали кое-что хорошее о буферах протокола Google и экспериментировали.

До сих пор нам очень повезло с сериализацией на сервере с, как представляется, самой распространенной версией .net - "protobuf-net". Нам не повезло, десериализация на клиенте. Мы попытались использовать то, что, кажется, один и единственный десериализатор javascript protobuf.js. Мы обнаружили, что его нелегко использовать, очень мало примеров или документации, и, похоже, он не обрабатывает типы данных за пределами строк и целых чисел.

Может показаться, что на этом этапе существует проверенное, хорошо определенное решение для сериализации / десериализации двоичных данных между .net и веб-клиентом. Может быть, мы упускаем что-то очевидное.

Наши требования - это вызовы Ajax от клиента и методы веб-служб .net на сервере (.asmx или WCF).

Любые комментарии и предложения приветствуются.

Ответы [ 3 ]

5 голосов
/ 16 июля 2009

Если клиент javascript, я думаю, вы будете бороться. Существует (как вы уже сказали) ограниченное покрытие javascript, но я не уверен, что оно принесет вам много пользы. На цитата из Кентон Варда (кто действительно знает протобуф):

Одна проблема с JavaScript и Протобуф в том что тебе нужно много поддержка кода для разбора сообщений. Если только вы не отправите довольно много вещи взад и вперед, делая пользователь загружает кодек JS protobuf Библиотека может быть чистым убытком. Может быть лучше использовать JSON или XML, потому что браузеры уже имеют встроенный поддержка тех.

Тем не менее, я думаю, различные люди внутри Google были игра с протоколом javascript + буферы на некоторое время, и если мы в конечном итоге со всем, что работает достаточно хорошо, мы выпустим его.

Так что, может быть, есть надежда в будущем. Сейчас я бы придерживался json + deflate, или, если ваш сценарий это позволяет, вы могли бы использовать апплет Silverlight, встроенный в клиент? Protobuf-net будет работать внутри Silverlight.

2 голосов
/ 16 июля 2009

Вы можете найти JSON на самом деле лучший ответ. Джастин провел серию сравнений производительности JSON с Thrift и Protocol Buffers и обнаружил, что сжатый JSON быстрее, чем буферы протокола, по крайней мере, в Python. Вот более ранняя тема по теме.

0 голосов
/ 08 февраля 2011

Как уже упоминалось, использование бинарных протоколов из javascript проблематично. Некоторые особенно неприятные аспекты:

А производительность вряд ли будет выше по сравнению с собственной поддержкой JSON или XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...