Qt 클라이언트에서 Erlang 서버에 데이터베이스 페이지 조회 요청 (1)
모든 사용자 계정은 유일하게 하나의 검색 프로세스에 대응하고 ets표로 사용자 계정 Acc와 그에 대응하는 동적 창설된 검색 데이터베이스의 프로세스 Pid 간의 매핑 관계를 관리한다.디자인할 때 사용자 계정을 사용하여 원자로 전환하고 원자로 등록 프로세스를 구축하는 것을 고려했지만 Erlang 시스템에서 원자가 회수되지 않고 동적으로 대량의 원자를 만드는 것은 메모리의 유출을 초래할 수 있다는 점을 고려해 이런 디자인을 포기했다.현재 디자인은 사용자 계정과 대응하는 검색 프로세스의 Pid를 ets표에 기록하여 사용자가 요청할 때 이 ets표에서 대응하는 검색 프로세스의 Pid를 얻을 수 있도록 합니다.(그러나 이 설계의 결함은 AccPid 매핑 관계를 저장하는 프로세스가 충돌하면 연락처를 검색하는 모든 사용자가 영향을 받을 수 있기 때문에 앞으로 더 좋은 해결 방안이 있기를 바란다는 것이다.)
생각이 정리되어 지금부터 공사를 시작한다.
이 모듈은 OTP 프레임워크를 사용할 수도 있고 사용하지 않을 수도 있습니다.그러나 공사의 건장성을 위해 OTP 행위 모델을 사용하면 감독자의 관리에 포함시킬 수 있다.
cs_accToSearchDBPid.erl
-module(cs_accToSearchDBPid).
-behaviour(gen_server).
-export([
start_link/0,
insert/2,
lookup/1,
delete/1
]).
-export([
init/1,
handle_call/3,
handle_cast/2,
handle_info/2,
terminate/2,
code_change/3
]).
-define(SERVER,?MODULE).
-define(TABLE_ID,?MODULE).
start_link()->
gen_server:start_link({local,?SERVER},?MODULE,[],[]).
insert(Acc,Pid)->
gen_server:cast(?SERVER,{insert,{Acc,Pid}}).
lookup(Acc)->
gen_server:call(?SERVER,{lookup,Acc}).
delete(Pid)->
gen_server:cast(?SERVER,{delete,Pid}).
init([])->
ets:new(?TABLE_ID,[private,named_table,set]),
{ok,state}.
handle_call({lookup,Acc},_,State)->
Value=ets:lookup(?TABLE_ID,Acc),
{reply,{ok,Value},State}.
handle_cast({insert,{Acc,Pid}},State)->
ets:insert(?TABLE_ID,{Acc,Pid}),
{noreply,State};
handle_cast({delete,Pid},State)->
ets:match_delete(?TABLE_ID,{'_',Pid}),
{noreply,State}.
handle_info(_,State)->
{noreply,State}.
terminate(_Reason,_State)->
ok.
code_change(_OldVsn,State,_Extra)->
{ok,State}.
cs_accToSearchDBPid 모듈에서 3개의 인터페이스 함수를 내보냅니다. insert는 새로운 Acc-Pid 쌍을 삽입하고lookup은 Acc 조회를 통해 대응하는 프로세스 Pid입니다. delete는 Acc-Pid 쌍을 삭제합니다.
구체적인 조회 프로세스 모듈은 다음 문장을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Instalando o Elixir e o Erlang com o gerenciador de versões asdfEsse tutorial usa o gerenciador de versões asdf, mas fique a vontade para utilizar outros se preferir. Infelizmente o as...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.