使用genservers将内存状态添加到Web API

时间:2019-03-02 21:40:48

标签: elixir pid gen-server

我目前正在尝试在Elixir中构建一个小型Web API,该API需要一些内存状态。简而言之,用户首次使用API​​时,便会启动某个业务流程,随后可以继续进行进一步的API调用。

为此,我已经看到最好的方法是创建GenServer,在其中存储状态,然后通过PID对其进行进一步的API调用。

在尝试搜索如何stringify以便在每个API调用中返回PID时,我发现this thread表示:

  

在回收PID时,不能保证它们是唯一的。

所以我的问题是:在这种情况下最好的方法是什么?通常如何解决?

1 个答案:

答案 0 :(得分:2)

:erlang.make_ref()可用于创建唯一标识符:

iex(1)> :erlang.make_ref()
#Reference<0.3918424786.2664955905.32640>

iex(2)> 

(是否有不想使用System.unique_integer/1的原因?)

Elixir文档mentionReferencePidPort数据类型,但我在Elixir中找不到有关Reference类型的任何信息,例如Elixir是否具有创建引用的本机功能。

回复评论

这是在Elixir中将引用转换为字符串*的方法:

iex(4)> make_ref() |> inspect()  
"#Reference<0.784388646.1821114370.207624>"

*在评论中归功于Hauleth,以查找Kernel.make_ref()

  

那行得通吗?

根据Kernel docs

  

返回的引用将在大约2 ^ 82次调用后再次出现;   因此,它对于实际用途来说足够独特。