У меня есть обработчик ковбойского отдыха, который должен порождать пару gen_servers. Как лучше всего отправлять/обрабатывать сообщения в моем ковбойском обработчике? Есть ли только одна возможность отправить сообщение от gen_server обработчику, используя "!" оператор?
Обработчик отдыха Cowboy и связь gen_servers
Ответы (2)
Cowboy порождает процесс Erlang с каждым запросом. Вы можете использовать стандартную передачу сообщений, но я не думаю, что это приведет к элегантному решению.
Почему бы не использовать gen_server:call
и gen_server:cast
для отправки сообщения от обработчика ковбоя? Еще лучше, если вы завернете call
и cast
в правильный API.
person
Tilman
schedule
05.06.2013
Да, я использую cast/call, когда сообщение идет от ковбоя к пользовательскому gen_server, но тогда gen_server должен отправить ответ, и кажется, что это возможно только с ! оператор.
- person Max Grigoriev; 05.06.2013
cast
всегда будет возвращать ok
. Он предназначен для асинхронной обработки. Для call
вы можете ответить {reply, my_response_message, State}.
в конце handle_call
. Вызывающий получит my_response_message
.
- person Tilman; 05.06.2013
Похоже, вы хотите использовать концепцию Cowboy обработчик цикла. Сделайте свой обработчик обработчиком цикла, а затем отправляйте ему сообщения с ваших gen_servers, используя !
person
johlo
schedule
09.06.2013
можно ли смешивать обработчик цикла и обработчик отдыха?
- person Max Grigoriev; 10.06.2013
Нет, это невозможно, обработчик REST в cowboy разработан на основе концепции работы с ресурсом, так что это не лучшее место для выполнения каких-то сложных действий. В любом случае, вы можете создать свой собственный обработчик цикла для своей проблемы. Но мне кажется, что существующего обработчика REST, который в основном порождает новые
gen_server
и выполняет call
внутри них, должно быть достаточно.
- person Keynslug; 10.06.2013
да, жаль, что мир erlang не полностью реализован как Java, и многие действия должны быть заново реализованы каждым разработчиком снова и снова :(
- person Max Grigoriev; 10.06.2013