実装には、この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
送信プロセスの中断を避けるために同じトリックを実行したくないのはなぜですか?