Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

[table]Задача# Что дано

Есть приложение, в котором уже есть некоторые акторы и определено

некоторое простое REST API.

* TickerActor - актор, срабатывающий раз в секунду и отсылающий задание в LinksActor

на чтение очередного url. Это специально сделано так, чтобы нас не забанили за слишком

частые запросы

* LinksActor - менеджер ссылок. Управляет знанием о том, какие ссылки посещены, какие поставлены

в очередь. В реальной жизни он бы хранил свое знание каким-то персистентным образом.

Но мы для простоты будем это делать в простых коллекциях.

* ClientActor - актор, отвечающий за вызов функциональности spray-клиента

* ServerActor - актор, отвечающий за функциоеальность spray-сервера

# Что хотим

В целом - сделать акторное приложение для краулинга русского раздела википедии.

В частности (я предполагаю, что обходить граф в ширину все уммеют):

* разовьем интерфейс и поведение LinksActor. Пусть он

** хранит очередь известных, но непосещенных путей и множество посещенных

** принимает сообщение AddPaths со списком путей-кандидатов, отбрасывает уже посещенные,

а остальные добавляет в очередь и в множество посещенных

** по PickNext берет путь из очереди и шлет Download в ClientActor

** адекватно отвечает на запрос о статистике

Это 5 баллов из 20

* разовьем поведение ClientActor

** Получив ответ и убедившись, что это корректный ответ (код 200), пошлем текст

в новый ContentActor

** В случае проблем сообщим о них в IssuesActor. Отдельно обработаем ситуации отсутсвия соединения,

ситуацию неуспешного кода и неожиданного типа контента. Будем считать, что все кроме text/html

для нас неожиданно

Это 5 баллов из 20

* создадим IssuesActor

Пусть у него будет три сообщения на три типа проблем (см. выше). Реакция - логирование (akka-логирование)

и подсчет проблем трех типов.

Это 2 балла из 20

* создадим ContentActor

** Добавим в проект внешнюю библиотеку bsoup (найдем ее в мавен-репозитории, добавим в build.sbt)

** Научимся принимать сообщения от ClientActor

** Будем хранить словарь, отображающий путь на сырой html

** С помощью bsoup будем находить ссылки, отбрасывать ссылки, ведущие за пределы индексируемого ресурса

и слать сообщение в ClientActor

** при ошибках парсинга информировать IssuesActor. Там появится четверный тип проблем

Это 5 баллов из 20

** Добавим в серверу новый путь - /issues. Ответом будет json, с 4 полями, в каждом из которых - количество проблем

каждого из 4 типов.

Это 3 балла из 20

# Требования и советы.

Нельзя использовать глобальные структуры.

Например, завести глобальный ConcurrentHashMap.

Все данные должны быть инкапсулированы в

акторы, ответственные за них.

Допускается локальная мутаельность. То есть можно сделать мутабельную

структуру и менять ее в акторе.

Конкретные интерфейсы акторов - на ваше усмотрение.

Часто одному актору нужно знать о других акторах.

Это можно решать двумя способами: или

указывать акторов-пертнеров при инициализации, или

передавать ActorRef через сообщение.

Выбор способа - на ваше усмотрение.

[/table]

3 года назад
guest_16529613565824
3 года в сервисе
Был
3 года назад

Заявки фрилансеров

Нет заявок фрилансеров
  • Похожие заказы

  • Ищется разработчик на Python с глубокими знаниями API Discord для доработки функционала существующего бота. Необходим опыт работы с Discord API и понимание основ разработки ботов.

    Закрыт
    3 года назад
  • Необходим Senior Frontend Developer для доработки агрегатора платежной системы. Работа включает конкретные задачи и возможность для творческого подхода. Ожидается высокий уровень квалификации и опыт работы с Angular.

    Закрыт
    3 года назад
  • Требуется разработать программу-кликер для Вилберис, которая будет взаимодействовать с MySQL для получения задач. Программа должна использовать API ключ или логин/пароль, а также обрабатывать ИД лота, сумму бюджета и ставку от 1 до 5. Кликер будет автоматически выполнять действия в кабинете на основе полученных данных.

    Закрыт
    3 года назад
  • Требуется разработать прикладное ПО для записной книжки с функционалом автоматического открытия файла при запуске, многостраничным просмотром, редактированием записей и удобной навигацией. Программа должна поддерживать быстрый вызов, добавление и удаление записей, а также закрытие файла при завершении работы. Обеспечьте интуитивно понятный пользовательский интерфейс.

    Закрыт
    3 года назад
  • Требуется разработать автоматизированную систему для автомойки на языке программирования C#. Включить пояснительную записку, описывающую функционал и технику реализации проекта.

    Закрыт
    3 года назад
  • Задание заключается в улучшении существующего кода для решения задачи n-ферзей с использованием методов обратного отслеживания. Необходимо реализовать эвристику минимальных оставшихся значений (MRV) и оптимизировать алгоритм с учетом эффективного выполнения на больших значениях n. Код для анализа будет предоставлен, а также требования к реализации дополнительных методов для повышения производительности.

    Прикладное ПОнет заявок
    Закрыт
    3 года назад
  • Требуется разработать плагин для Mozilla Thunderbird, который будет периодически проходить по всем папкам всех аккаунтов и выполнять дополнительную фильтрацию и сортировку писем. Фильтрация должна учитывать содержание письма, так как существующие фильтры на стороне mail.ru не позволяют этого сделать.

    Прикладное ПО1 исполнитель
    Закрыт
    3 года назад
  • Требуется разработать прикладное ПО для дублирования действий с одного компьютера на несколько других или виртуальных машин. Программное обеспечение должно выполнять команды, такие как нажатие кнопок и запуск приложений одновременно на всех устройствах. Интересуют методы реализации, стоимость, необходимые ресурсы (сервера, ВПС, виртуалки) и возможные подводные камни.

    Закрыт
    3 года назад