skip to main |
skip to sidebar
Есть задача:
передача файлов 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 версия работы тут.