Mochiweb code을 통해 건너 뛰었지만 상태 변수의 부호를 찾지 못했습니다.Mochiweb에 State 변수가 있습니까?
gen_server의 State 변수와 비슷한 것이 Mochiweb에 있습니까?
소량의 주 관련 서버 측 (세션 관련이 아닌) 데이터를 서버에 저장해야하며 ETS 또는 Mnesia를 사용하고 싶지 않습니다.
Mochiweb code을 통해 건너 뛰었지만 상태 변수의 부호를 찾지 못했습니다.Mochiweb에 State 변수가 있습니까?
gen_server의 State 변수와 비슷한 것이 Mochiweb에 있습니까?
소량의 주 관련 서버 측 (세션 관련이 아닌) 데이터를 서버에 저장해야하며 ETS 또는 Mnesia를 사용하고 싶지 않습니다.
나는 gen_server 상태에 대해 오해하고 있다고 생각합니다.
우선, 어떻게 떡 웹이 작동하는지 간단히 설명합시다.
Mochiweb은 클라이언트마다 gen_server 프로세스를 생성하지 않습니다. 대신, 그냥 proc_lib:spawn/3
을 사용하여 새 프로세스를 생성하고, 기본적으로있는 매개 변수화 모듈, 다음과 같은 종류의 튜플 작성
{mochiweb_request, #Port<0.623>, get, "/users", {1, 1}, []}
이 튜플이로 사용
{mochiweb_request, Socket, Method, RawPath, HTTPVersion, Headers}
입니다 루프 매개 변수로 mochiweb_http:start/1
에 전달하는 함수에 대한 인수입니다. 이 "루프"함수가 호출 될 때, 그것은 다음과 같이 표시됩니다
handle_request(Req) ->
%% The pattern matching below just shows what Req really is
{mochiweb_request, _, _, _, _, _} = Req,
...
이제 gen_server 상태의 설명을.
기본적으로 gen_server는 대략 다음 구조를 가진 프로세스입니다. 물론, IRL은 더 복잡하지만 이것은 당신에게 일반적인 아이디어를 줄 것이다 :
init(Options)
State = ...
loop(Module, State).
loop(Module, State)
NewState = receive
{call, Msg, From} -> Module:handle_call(Msg, From, State)
{cast, Msg} -> Module:handle_cast(Msg, State)
Info -> Module:handle_info(Info, State)
end,
loop(Module, NewState).
그래서, 국가가 모든 함수 호출을 통해 드래그 앤 루프 내에서 변경 단지 인수입니다. 프로세스가 gen_server인지 여부에 상관없이 실제로는 중요하지 않습니다. 수명이 얼마되지 않습니다. 다시 mochiweb에 지금
a() ->
b([1, 2, 3], now()).
b(State, Timestamp) ->
Result = do_something(Timestamp)
c(State, Result).
c(State, Payload) ->
exit({State, Payload}).
: 다음 예에서 용어 [1, 2, 3]
역시 상태입니다. 당신이 당신의 자신의 상태를 만들어야하는 경우
, 당신은 여분의 함수 인수를 추가 할 수 있습니다
handle_request(Req) ->
User = Req:get(path),
UserData = load_user_data(User),
handle_request(Req, UserData).
handle_request(Req, UserData) ->
...
이제 UserData를 너무 상태입니다. 이 프로세스를 반복하거나 즉시 응답하고 끝낼 수는 있지만 사용자 데이터를 인수로 전달하는 한 UserData를 잃지는 않습니다.
마지막으로,이 프로세스를 gen_server (대부분의 경우 매우 비합리적)로 만들려면 gen_server : enter_loop/3 함수를 사용하면 현재 프로세스를 gen_server로 만들 수 있습니다. 그리고이 함수의 세 번째 인수는 시작된 gen_server 내부에 저장 될 상태입니다.
요청이 완료된 후에도 상태를 유지해야합니까? –