该gen_server
实现具有这个有趣的小功能:
do_send(Dest, Msg) ->
case catch erlang:send(Dest, Msg, [noconnect]) of
noconnect ->
spawn(erlang, send, [Dest,Msg]);
Other ->
Other
end.
选项的条目erlang:send/3
说noconnect
如果在发送之前必须自动连接目标节点,则返回 noconnect。
这里的函数通过强制生成的进程进行等待来避免在节点之间建立连接的延迟。聪明的!
还有另一种选择erlang:send/3
,nosuspend
:
如果发送者必须被挂起才能进行发送,则返回 nosuspend。
每,erlang:send_nosuspend/2
如果连接过载,发送方将被挂起。为什么不gen_server
希望使用相同的技巧来避免暂停发送过程呢?