Есть только 2 способа получить доступ к процессу в Erlang: либо вы знаете его Pid (и узел, где вы ожидаете, что процесс будет), либо вы знаете его зарегистрированное имя (и узел erlang, которым он ожидается).
Допустим, у вас есть appmod:
-module(myappmod).
-export([out/1]).
-include("PATH/TO/YAWS_SERVER/include/yaws_api.hrl").
-include("PATH/TO/YAWS_SERVER/include/yaws.hrl").<br>
out(Arg) ->
case check_initial_state(Arg) of
unknown -> create_initial_state();
{ok,Value}->
UserPid = list_to_pid(Value),
UserPid ! extract_request(Arg),
receive
Response -> {html,format_response(Response)}
after ?TIMEOUT -> {html,"request_timedout"}
end
end.<br>
check_initial_state(A)->
CookieObject = (A#arg.headers)#headers.cookie,
case yaws_api:find_cookie_val("InitialState", CookieObject) of
[] -> unkown;
Cookie -> {ok,Cookie}
end.<br>
extract_request(Arg)-><br> %% get request from POST Data or Get Data
Post__data_proplist = yaws_api:parse_post(Arg),
Get_data_proplist = yaws_api:parse_query(Arg),
%% do many other things....
Request = remove_request(Post__data_proplist,Get_data_proplist),
Request.
Эта простая настройка показывает вам, как вы будете использовать процессы, чтобы хранить информацию о пользователе.Однако использование процессов не является хорошим.Процессы терпят неудачу, поэтому вам нужен способ восстановления данных, которые они хранили.
Лучший подход - иметь хранилище данных о ваших пользователях и один сервер gen_server для поиска.Вы можете использовать Mnesia
.Я не советую вам использовать процессы в Интернете, чтобы сохранять состояние пользователя, независимо от того, какое приложение вы делаете, даже если это приложение для обмена сообщениями.Таблицы Mnesia или ETS
могут поддерживать состояние, и все, что вам нужно сделать, это посмотреть вверх.
Используйте лучший механизм хранения для сохранения состояния, отличного от процессов.Процессы - это точка отказа.Другие используют файлы cookie (и / или файлы cookie сеанса), значение которых каким-то образом используется для поиска чего-либо из базы данных.Однако, если вы настаиваете на том, что вам нужны процессы, вы можете запомнить их PID или зарегистрированные имена.Вы можете сохранить пользовательский Pid в своем сессионном cookie и т. Д.