Возиться с поведением erlang и gen_event - PullRequest
0 голосов
/ 27 ноября 2009

В концептуальном доказательстве, которое я разрабатываю, я построил следующую схему:

   _ A _ _
  /  |  \ \
 SS  S   H CC
    / \
   C   C

в котором: A - Заявка

СС - супервайзер

УК - «Реальный» клиент

S - gen_server

H - gen_event

C - «внутренний» клиент

Приложение работает как мультиплексор. Я подключаюсь к своему внутреннему клиенту на моем сервере и запрашиваю некоторые вещи. Затем я передаю этот запрос моему реальному клиенту (который подключается к реальному приложению) и распределяю его по любому внутреннему клиенту, которому требуются такие вещи.

Все работает нормально, за исключением обработки событий: я хотел, чтобы мой внутренний клиент отправлял сообщения непосредственно обработчикам gen_event, и он выполнял бы процесс запроса реального сервера / чтения из кэша и ответа клиенту.

Я подумал, что мне нужно сделать связь между обработчиком событий и процессом обработки моего клиента, это правильно? Может быть, дело в том, чтобы обработчик событий был глобальным процессом и просто перекачивал сообщения между клиентами?

Извините за длинный вопрос.

Ответы [ 2 ]

1 голос
/ 27 ноября 2009

Я не уверен, что понимаю вопрос, но при условии , что вы после своего рода переключателя сообщений , чтобы клиенты могли обмениваться сообщениями в распределенном режиме, вы можете посмотреть на один мой проекты, которые делают именно это: Mswitch .

Конечно, если вы регистрируете «глобальный процесс» (доступный локально и / или удаленно), вы всегда можете пересылать ему сообщения, и этот процесс распределяет эти сообщения по своему усмотрению. Обязательно не забывайте о распространенных ловушках, когда процессы в разных экземплярах эмулятора взаимодействуют друг с другом (синхронизация файлов cookie и зарегистрированное имя виртуальной машины).

0 голосов
/ 27 ноября 2009

Если вы зарегистрируете обработчик, он будет иметь глобально известное имя, а затем вы сможете отправлять ему сообщения напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...