我目前正在用 erlang 编写一个软件,它现在基于 gen_server 行为。这个 gen_server 应该导出一个函数(我们称之为 update/1),它应该使用 ssl 连接到另一个在线服务,并将作为参数传递给函数的值发送给它。
当前 update/1 是这样的:
update(Value) ->
gen_server:call(?SERVER, {update, Value}).
因此,一旦调用它,就会调用 ?SERVER ,其处理方式如下:
handle_call({update, Value}, _From, State) ->
{ok, Socket} = ssl:connect("remoteserver.com", 5555, [], 3000).
Reply = ssl:send(Socket, Value).
{ok, Reply, State}.
一旦数据包被发送到远程服务器,对等方应该切断连接。
现在,这适用于我在 shell 中的测试,但是如果我们必须调用 1000 次 mymod:update(Value) 并且 ssl:connect/4 不能正常工作(即达到超时)会发生什么?
此时,我的 gen_server 将有非常大量的值,它们只能一个一个地处理,导致第 1000 次更新将在使用 update/1 更新其值后仅 1000*3000 毫秒完成。
使用强制转换而不是调用会留下同样的问题。我怎么解决这个问题?我应该使用普通函数而不是 gen_server 调用吗?