【问题标题】:Cowboy rest handler and gen_servers communication牛仔休息处理程序和 gen_servers 通信
【发布时间】:2013-10-21 00:05:49
【问题描述】:

我有牛仔休息处理程序,它应该产生几个 gen_servers。 在我的牛仔处理程序中发送/处理消息的最佳方式是什么? 是否只有一种可能性可以使用“!”将消息从 gen_server 发送到处理程序?运营商?

【问题讨论】:

    标签: erlang cowboy


    【解决方案1】:

    Cowboy 为每个请求生成一个 Erlang 进程。您可以使用标准消息传递,但我认为它不会导致优雅的解决方案。

    为什么不使用gen_server:callgen_server:cast 从牛仔处理程序发送消息?当您将 callcast 包装在适当的 API 中时,效果会更好。

    【讨论】:

    • 是的,当消息从牛仔发送到自定义 gen_server 时,我使用 cast/call,但随后 gen_server 应该发送一个答案,似乎只有“!”才有可能运算符。
    • cast 将始终返回 ok。它用于异步处理。对于calls,您可以在handle_call 末尾回复{reply, my_response_message, State}.。来电者将收到my_response_message
    【解决方案2】:

    听起来您想使用 Cowboy 的 loop handler 概念。使您的处理程序成为循环处理程序,然后使用 ! 从您的 gen_servers 向其发送消息

    【讨论】:

    • 可以混合使用循环处理程序和休息处理程序吗?
    • 不,这不可能,牛仔中的 REST 处理程序是围绕“资源操作”的概念设计的,所以它不是做一些困难的事情的好地方。无论如何,您可以为您的问题手工制作自己的循环处理程序。但对我来说,似乎现有的 REST 处理程序(基本上会产生新的 gen_servers 并在其中执行 call)就足够了。
    • 是的,很遗憾 erlang 世界没有完全实现为 Java,许多操作应该由每个开发人员一次又一次地重新实现:(
    猜你喜欢
    • 2015-04-18
    • 2017-06-14
    • 2017-06-22
    • 2013-12-19
    • 2016-07-19
    • 2013-05-30
    • 2015-11-03
    • 2017-11-29
    • 2018-08-28
    相关资源
    最近更新 更多