이제 필자가 gen_servergen_server : 전화 - 한 두 번째 세대 서버 모드입니다 - -
와 함께 연주 메시지 나는 두 개의 모듈을 보내는 방법을 로직 모듈
와 PID에 메시지를 보내려고 gen_server을 통해 :
012 : 여기lookup_by_date(FromTime, ToTime) ->
gen_server:call({global, ?MODULE}, {lookup_by_date,FromTime,ToTime}).
가 handle_call의 FUNC입니다 : 여기
코드의 싹둑입니다 전화 3,516,
handle_call({lookup_by_date, FromTime, ToTime}, _From, _State) ->
FromSec = calendar:datetime_to_gregorian_seconds(FromTime),
ToSec = calendar:datetime_to_gregorian_seconds(ToTime),
Pid = spawn(fun()-> logic:handler() end),
{reply, Pid !{lookup_by_date, FromSec, ToSec}, _State};
aand가 논리 모드 코드 :
lookup_by_date(FromTime, ToTime) -> lookup_by_date(FromTime, ToTime, ets:first(auth), []).
lookup_by_date(_FromTime, _ToTime, '$end_of_table', Acc) -> {reply, Acc, ok};
lookup_by_date(FromTime, ToTime, Key, Acc) ->
case ets:lookup(auth, Key) of
[{Login, Pass, TTL, Unix, Unix2}] ->
F = calendar:datetime_to_gregorian_seconds(Unix2),
T = calendar:datetime_to_gregorian_seconds(Unix2),
if
F >= FromTime, T =< ToTime -> NewAcc = [{Login, Pass, TTL, Unix, Unix2}|Acc],
N = ets:next(auth, Key),
lookup_by_date(FromTime, ToTime, N, NewAcc);
true -> N = ets:next(auth, Key),
lookup_by_date(FromTime, ToTime, N, Acc)
end
end.
handler() ->
receive
{lookup_by_date, FromTime, ToTime}->
lookup_by_date(FromTime, ToTime),
handler();
Other->
io:format("Error message for ~p~n" ,[Other]),
handler()
end.
하지만 난 오류 (실제로는없는 오류)
2> C (cache_server)을 얻고있다.
{확인 cache_server}
3> C (로직).
{확인 로직}
4> cache_server 시작 ([{TTL 15000}]).
{확인, < 0.73.0>}5> cache_server : 삽입 (테스트, 루트, 15000).
{인증, 테스트 루트 15000,1484309726435, 2017,1,13 {{}, {14,15,11}}}
6> cache_server : lookup_by_date ({{2017,1, 13}, {14, 15, 11}}, {{2017, 1, 13}, {14, 15, 11}}){lookup_by_date, 63651536111,63651536111}
내가로부터 데이터를 수신하고 - {, 응답도 (Pid) {lookup_by_date, FromSec, ToSec}, _state!};
하지만이 "논리 : lookup_by_date"로부터 데이터를 수신하지 말아 기능
임 조금 붙어 있기 때문에 당신이 나에게 올바른 방향을 보여 어쨌든입니다. 들으 ... 당신의 코드에서
아. 당신의 대답에 감사드립니다. 변경 및 완벽하게 작동합니다. 정말 도움이. 다시 thx – Qbeck