Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.63.90] |
|
Сообщ.
#1
,
|
|
|
Допустим имеется несколько датчиков: D1, D2, D3 и контроллер C, который должен реагировать на сообщения датчиков (D1.M1, D1.M2, D2.M1, ...).
Каким образом лучше организовать связь контроллера с датчиками: 1) контроллер имеет три входных канала: C.D1, C.D2, C.D3, каждый из которых связан с определенным датчиком, и соответственно на каждом этапе цикла прослушивания проверяет каждый из каналов на наличие новых сообщений. Примерно так: select D1 ?=> message : case message of M1 : do_something M2 : do_something_else end case D2 ?=> message : case message of M1 : do_other_thing M2 : do_another_thing ... end case ... end select или 2) контроллер имеет один входной канал C.in, а "одноименные" сообщения разделяет, например, по типу отправителя/сообщения или какому-нибудь префиксу, т.е. примерно так: select in ?=> message : case message of D1.M1 : do_something D1.M2 : do_something_else D2.M1 : do_other_thing D2.M2 : do_another_thing ... end case end select ? Или, если выбор стиля зависит от ситуации, то в каких ситуациях какой вариант предпочтительней? |
Сообщ.
#2
,
|
|
|
А вообще какая платформа или язык разработки у этой задачи?
|
Сообщ.
#3
,
|
|
|
Цитата deil @ А вообще какая платформа или язык разработки у этой задачи? Платформа никакая, вопрос общий по диспетчеризации сообщений; язык любой, имеющий непосредственную или при помощи дополнительных библиотек поддержку CSP-подобной конкурентности. |
Сообщ.
#4
,
|
|
|
ИМХО выбор варианта зависит от того, что важнее: сообщение или датчик. Если от разных датчиков летит одно и то же сообщение и нам не так важен отправитель - то я бы использовал общий канал. Если смысл одноименных сообщений от разных датчиков - разный, то делал бы по каналу на датчик. Хотя, по сути, это просто вопрос кол-ва кода, нежели его наглядности или сложности.
|