Я использую zeromq для решения проблемы, которая включает в себя несколько сотен (потенциально тысяч) клиентов, которые требуют выполнения задач. Каждый клиент будет запрашивать выполнение конкретной задачи, а результаты, которые будут выполнены, будут возвращены клиенту, который отправил этот запрос.
Это актеры, которых я определила до сих пор в схеме, которую я придумала:
- Клиент: это субъект, который запрашивает выполнение единицы работы (или «задания»)
- Контроллер: это актер, который распределяет «задания» по доступным двигателям
- Engine: это актер, который получает запрос задания от контроллера и публикует результат обратно клиенту.
Я до сих пор не выяснил, как движок возвращает сообщение клиенту. Я предполагаю, что одним из способов реализации этого с использованием zeromq будет:
Клиент:
Сообщения о задании PUSH на одном сокете для контроллера. SUBscribe на завершенные результаты, опубликованные Engine, на другом.
Гнездо * * 1 021
Контроллер:
Потяните сообщения о заданиях от клиента на одном сокете. Публикуйте сообщения о заданиях на движки на другом сокете (очевидно, это будет устройство пересылки)
Двигатель:
ПОДПИСАТЬСЯ на рабочие сообщения в одном сокете. Опубликовать результат в другом сокете
Было бы очень полезно, если бы кто-то предоставил скелет / фрагмент, который покажет схему того, как этот шаблон может быть реализован, с использованием фреймворка zeromq.
Фрагмент кода может быть на C, C ++, PHP, Python или C #
[[Изменить]]
После прочтения на Фермах Задач (как предложено akappa). Я думаю, что эта проблема действительно может быть смоделирована с помощью фермы задач. Я изменил свои оригинальные актеры соответственно (и изменил название тоже).
Было бы очень полезно, если бы кто-то, кто знаком с zeromq, мог набросать скелет, который показал бы, как я могу использовать основные компоненты для создания такой структуры.