LL
Size: a a a
LL
LL
cast между call и reply не нуженev
reply клиентуLL
msg будет послан из сервера клиенту, когда клиент думает, что сервер в состоянии с аттрибутами, а на самом деле нетLL
LL
call-reply всё очень-очень тривиально. Зачем эти сложности?ev
msg будет послан из сервера клиенту, когда клиент думает, что сервер в состоянии с аттрибутами, а на самом деле нетLL
p1 sends call to p2
p3 sends msg to p1
p2 sends cast to p1
p2 sends reply to p1
p2 сообщения обработаются в таком порядке: reply, msg, casttcp-процесса во время msg не совсем ясноev
call-reply всё очень-очень тривиально. Зачем эти сложности?ev
LL
ev
ev
LL
defmodule Ccr.Manager do
...
def handle_call(:ping, _from, state) do
Process.sleep(1_000)
GenServer.cast(Ccr.Server, "cast from manager")
Process.sleep(1_000)
{:reply, :pong, state}
end
end
defmodule Ccr.Server do
...
def handle_cast(:letsdothis, state) do
reply = GenServer.call(Ccr.Manager, :ping)
IO.inspect "received reply #{reply}"
{:noreply, state}
end
def handle_cast(cast, state) do
IO.inspect "received cast #{cast}"
{:noreply, state}
end
def letsdothis do
Ccr.Server.start_link()
Ccr.Manager.start_link()
GenServer.cast(Ccr.Server, :letsdothis)
Process.sleep(500)
GenServer.cast(Ccr.Server, "some random message in between")
end
end
iex(1)> Ccr.Server.letsdothis
:ok
"received reply pong"
"received cast some random message in between"
"received cast cast from manager"
LL
case или даже лучше withev
case или даже лучше withLL
DP
DP
ŹR