저는 대부분의 앱을 OTP 동작으로 이식했지만 막혔습니다. gen_server를 사용하여 선택적 수신을 수행하는 방법을 알아낼 수 없습니다. 콜백 함수 절이 하나도없는 경우 메시지를 사서함에 다시 저장하는 대신 오류가 발생합니다.gen_servers의 선택 수신은 어떻게합니까?
이제 모든 곳에서 내가 선택한 사람들은 선량을 칭찬합니다. 내가가는 곳마다 사람들은 OTP를 자랑합니다. 한 번에 둘 다 가질 수는 없다는 것이 사실 일 수 있습니까? 이것은 주요한 수정 가능한 단점처럼 보이지 않습니까?
어떻게 erlang 프로그래머가 이것을 처리합니까?
편집 (의 데이빗 주석에 응답) :
은 여기가 정렬 된 순서로 인쇄 된 정수의 목록을보고 싶어요 예입니다 : 내 실제 응용 프로그램에서, 물론
-module(sel_recv).
-behaviour(gen_server).
-export([start_link/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-export([test/0]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
test() ->
gen_server:cast(?MODULE, test).
init([]) ->
{ok, 0}.
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(test, _State) ->
lists:map(fun(N) ->
gen_server:cast(?MODULE, {result, N})
end, [9,8,7,6,5,4,3,2,1]),
{noreply, [1,2,4,5,6,7,8,9]};
handle_cast({result, N}, [N|R]) ->
io:format("result: " ++ integer_to_list(N) ++ "~n"),
{noreply, R}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
을, 타이머 지연이 있고 순서대로 처리해야하는 메시지는 다른 메시지와 인터리브됩니다. 특히 HTTP 요청을 한 번에 한 번에 한 번에 한 번에 한 번씩 한 번에 하나씩 보내 게됩니다. 어쨌든 나는 그것을 순서대로 수집해야한다.
달성하고자하는 것은 무엇입니까? – Zed