GenServer
経由でリモート TCP 接続に接続している がありますgen_tcp
。
opts = [:binary, active: true, packet: :line]
{:ok, socket} = :gen_tcp.connect('remote-url', 8000, opts}
私はメッセージを処理しています:
def handle_info({:tcp, socket, msg}, stage) do
IO.inspect msg
{:noreply, state}
end
これはうまくいきます。ただし、TCP サーバーはタイムアウトしがちです。を使用している場合はgen_tcp.recv
、タイムアウトを指定できます。ただし、 でactive: true
メッセージを受信するために使用しhandle_info
ており、ループして呼び出す必要はありませんrecv
。そのGenServer
ため、サーバーがタイムアウトした場合でも、次のメッセージを喜んで待ちます。
GenServer
X 秒後に TCP 接続からメッセージを受信していない場合、関数をトリガーするにはどうすればよいですか? 私は使用して立ち往生していrecv
ますか?