Программирование сокетов. C++ vs Java vs Ruby. Сравнения подходов.

Есть задача:


  • передача файлов peer-to-peer с помощью socket'ов.
  • Клиент-серверная архитектура.
  • Протокол взаимодействия:
    Установка соединения.
    Клиент:- Запрос файлов
    Клиент:- Запрос конкретного файла
    Сервер:- Передача фалйла
    Закрытие сессии.

  • Сервер одновременно должен обрабатывать множество запросов клиентов.
  • Система не должна быть robust, просто должна выполнять базовую функциональность.



    Задание было выполнено на 3х языках: C++ (наиболее полная версия), Java 1.4, Ruby 1.8.5

    Результаты и сравнения.



    1. Скорость работы
  • Отличие в скорости передачи очень не значительные (1. С++ 2. Java 3. Ruby)

    2. Понятность/читабельность кода
  • С++ код выглядит довольно страшно, несмотря на то что код объектный. Размер кода довольно велик.
  • Java код выглядит очень просто и понятно. Легко поддается рефакторингу. Многие части пригодны для reuse.
  • В Ruby нет ни одной лишней строчки, код довольно функциональный. Никаких лишних конструкций и преобразований.

    3. Время разработки

  • С++ очень много времени уходит на типизацию, преобразование данных, работу с буфферами.
  • Для разработки на Java потребовалось наименьшее количество времени.
  • Разработка на Ruby заняла не больше 3х часов, при том что знания о р-сокетах и синтаксисе Ruby были минимальными.

    4. Сложность
  • Работа с сокетами на С++ имеет много сложностей. Надо четко предсталять структуру Socket'a. Все флаги.
  • Работая с сокетами в Java, не надо быть специалистом. Многоие настройки можно опустить.
  • Все что надо знать в Ruby работая с сокетами это имя хоста и порт :)

    5. Функциональность
  • С++: Очень гибкие настройки, можно управлять практически всем.
  • Многие настройки доступны в Java
  • В руби практически все настройки приняты по умолчанию, но при желании можно их изменять.

    6. Документация/Примеры
  • Мало хорошей понятной документации. Существующая имеет много ошибок и неточностей.
  • Больше всего документации для Java. Много примеров
  • На момент написания, было несколько статей с применением сокетов + оффициальная документация, которой вообщем достаточно для разработки.

    Draft версия работы тут.
  •