синхронизировать вызов из процесса со многими входящими сообщениями - PullRequest
0 голосов
/ 10 октября 2011

Необходимо реализовать синхронизированный вызов от процесса, который получает много входящих сообщений от других процессов. Проблема в различии - когда пришло сообщение в ответ на звонок. Нужно ли мне порождать дополнительный процесс для извлечения сообщений из очереди в буфер, в то время как возврат сообщения не обнаружен, а затем отправить его в основной процесс и после того, как все остальные приняты.

1 Ответ

0 голосов
/ 11 октября 2011

Хитрость заключается в использовании ссылки в качестве токена для репликации:

 replicate() ->
    {ok, Token} = db:ask_replicate(...),
    receive
       {replication_completed, Token} ->
             ok
    end

, где Token создается с вызовом make_ref().Поскольку никакое другое сообщение не будет соответствовать Token, вы в безопасности.Другие сообщения будут помещены в почтовый ящик для последующего изучения.

Однако в приведенном выше решении не учитываются сбои процесса.Вам также необходим монитор на сервере БД.Самый простой способ получить правильный шаблон - это позволить медиатору быть gen_server.Кроме того, вы можете прочитать главу в LearnYouSomeErlang: http://learnyousomeerlang.com/what-is-otp#the-basic-server посмотреть на синхронный вызов в kitty_server.

...