PDA

Просмотр полной версии : И снова про протокол клиент-сервер


mikhailk
11.06.2010, 17:12
Cейчас как раз запускаем в производство очередное приложение, нужно, чтобы кто-нибудь развеял мои сомнения. Планирую целиком работать через XMLSocket (cокет-сервер на java), при этом в качестве самого протокола меня бы очень устроил xml.

Я прочитал общее и единодушное мнение, что быстрее работает бинарный протокол через просто Socket, но мне крайне важна гибкость. По сложившейся практике приложение будет после сборки доводиться напильником и приобретать новые качественные черты, которые очевидно потребуют передачи новых данных.

Собственно вопрос в следующем. Близкой заменой xml является json. Задача парсинга json на стороне клиента решена, на стороне сервера тоже проблем не вижу. С учетом характера передаваемой информации (в основном это целые небольшие числа) получу экономию трафика где-то раза в полтора.

Имеет ли смысл с этим заморачиваться или реального выигрыша по сравнению с xml я все равно не почувствую?

membrilius
11.06.2010, 21:29
Вообще JSON побыстрее будет, но это от ситуации тоже.

Хотя я больше люблю старый добрый XML, хоть и громозкий зато не надо ставить дополнительные библиотеки.

Просто XML это уже стандарт. А JSON, может более удобный и читаемый, но как-то не по душе.

вообщем если по критериям то:
Вид:
XML:
<root>
<time>20:22</time>
<date>
<day>11</day>
<month>06</month>
<year>2010</year>
</date>
</root>

JSON:
{
"time" : "20:22",
"date" : {
"day" : "11",
"month" : "06",
"year" : "2010"
}
}

Объем меньше, отправляется быстрей.

На клиенте просто преобразовываем ответ в объект и работаем с ним.

В PHP вообще есть функции преобразователи, можно легко преобразовать массив в строку JSON. Но с XML тоже проблем нет.

Ну и читаемость у JSON получше. Хотя тоже дело привычки.

Psycho Tiger
11.06.2010, 21:32
Я использую почти всегда исключительно JSON, мои коллеги в офисе - XML. Оба варианта хороши, можно даже сказать почти идентичны. Используйте то, что вам проще.

-De-
11.06.2010, 23:34
Мне кажется 1.5 раза не решают. Но XMLSocket - не нужен, можно сделать обычный и гонять по нему xml в крайнем случае. Вродь и бинарный протокол не то чтоб проблема сделать гибким.

mikhailk
12.06.2010, 00:53
так наверное, если xml гонять, то какой смысл отказываться от XMLSocket и эмулировать в итоге его своим классом поверх обычного сокета?

Под бинарным протоколом я понимаю фиксированный набор пакетов с жесткой структурой, в которых описательная информация отсутствует, поскольку она не нужна - на передающей и принимающей стороне есть соответствующие обработчики этих пакетов (по одному на каждый тип, либо универсальные). И если у нас появляется необходимость передавать новую информацию, то нам надо править эти самые обработчики, иначе пакет будет либо неправильно обработан, либо вообще не принят в обработку. В распределенной системе получаем хорошую головную боль и/или радостный зоопарк.

Или мы о разном говорим?


В остальном - видимо, действительно, если удобно xml'ем, то то так и надо делать.

Dimitry_II
12.06.2010, 01:13
Да ну ...
И передача быстрее, и парсинг быстрее, и с объектом значительно удобнее работать, чем парсить хмл.
Делал на json, мне xml не нравится в принципе.

А вобще лучше RemoteObject через AMF - и вовсе "пестня" ... до сих пор от восторга отойти не могу.

Котяра
12.06.2010, 01:56
еще protoBuf есть..