Elixir ';接听电话';超时
我正在从genserver中的handle info函数调用elixir genserver,以添加从客户端获取的电话号码。但一旦handle_调用被调用,所有者进程就会崩溃[超时]。请帮忙 全局创建一个ETS,以在调用下面所述的任何函数之前插入值Elixir ';接听电话';超时,elixir,gen-server,Elixir,Gen Server,我正在从genserver中的handle info函数调用elixir genserver,以添加从客户端获取的电话号码。但一旦handle_调用被调用,所有者进程就会崩溃[超时]。请帮忙 全局创建一个ETS,以在调用下面所述的任何函数之前插入值 def handle_info(消息、状态)do {a,b}=消息 phonenumber=b[:正文] 添加电话号码 {:诺雷普利州} 结束 def添加(电话号码)do 调用(_模块,{:add,phonenumber}) 结束 def handl
def handle_info(消息、状态)do
{a,b}=消息
phonenumber=b[:正文]
添加电话号码
{:诺雷普利州}
结束
def添加(电话号码)do
调用(_模块,{:add,phonenumber})
结束
def handle_调用({:add,phonenumber},from,state)do
:ets.insert(:access_table,{:details,phonenumber})
回复={:好的,“在配置文件中添加了{phonenumber}”
新的_状态=[{username}|状态]
{:回复,回复,新州}
结束
错误:
**当服务器状态==[]
**终止原因==
**{超时,{gen_server,call,['Elixir.Bankrecord',{add,“346534543534”},5000]}
**(从#PID退出)在::gen_server.call中退出(Bankrecord,{:add,'346534543534'},5000)
**(退出)超时
您不能在通话中呼叫自己,就像您的handle\u info调用add
在gen\u服务器上执行回拨一样。由于所有操作都是在gen_服务器中按顺序进行的,因此最终会阻塞自己。解决方案应该是在模块上使用一个简单的私有add
函数,并同时具有handle\u info
和handle\u调用({:add
delegate)
def add(电话号码)do
调用(_模块,{:add,phonenumber})
结束
def handle_info({uu,message},state)do
添加号码消息[:正文]
{:诺雷普利州}
结束
def handle_调用({:add,phonenumber},from,state)do
添加电话号码
{:回复,{:好的,{phonenumber}添加到配置文件“},[{username}}状态]}
结束
defp添加号码(电话号码)do
:ets.insert(:access_table,{:details,phonenumber})
结束
谢谢Chris,由于我是长生不老药的新手,您是否可以分享一些解决我问题的代码示例。非常感谢。我添加了一个函数delegationWorks的示例,如charm,仍然是最后一个查询Chris[如果您可以帮助]。我在想,当我的handle_信息没有返回任何信息时,我如何使用handle_call将回复发送回带有ETS电话号码更新列表的客户端。只是有点困惑,无法理解genserver的流程。您可能想要回复/2