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

问题描述 投票:1回答:1

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

为此,我已经看到最好的方法是创建一个GenServer,在那里存储状态,然后通过PID进一步使用API​​调用。

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

PID不能保证是唯一的,因为它们被回收。

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

elixir pid gen-server
1个回答
2
投票

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

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

iex(2)> 

(你有没有理由不想使用System.unique_integer/1?)

Elixir docs mention ReferencePidPort数据类型,但我找不到有关Elixir中Reference类型的任何信息,例如Elixir是否具有创建引用的本机函数。

回复评论:

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

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

*在寻找Kernel.make_ref()的评论中归功于Hauleth。

那会有用吗?

根据Kernel docs

返回的引用将在大约2 ^ 82次调用后重新发生;因此它具有足够的实用性。

© www.soinside.com 2019 - 2024. All rights reserved.