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, cast
tcp
-процесса во время 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
или даже лучше with
ev
case
или даже лучше with
LL
DP
DP
ŹR