본문 바로가기
Server

13. 유저 세션(2)

by Doromi 2018. 1. 15.
728x90
반응형

프로세스를 스스로 종료되도록 하려면 몇 가지 방법들이 있다.

물론 exit(Pid,kill)함수를 사용해도 되겠지만 프로세스 스스로 종료되도록 하는 것이 낫다.

 

stop 메시지를 받으면 종료되도록 하는 방법

 

receive

{Pid,Message} -> Pid ! Message;

stop -> true

end

 

 

5초 동안 아무런 메시지를 못 받으면 바로 종료되도록 하는 방법

 

receive

{Pid,Message} -> Pid ! Message;

after

5000 ->

 true

end

 

timer를 등록해서 몇초 후에 스스로에게 stop 메시지를 보내도록 해도 된다.

 

erlang:send_after(Time, Dest, Msg) -> TimerRef.

 

예로 5초 후에 자기 자신에게 stop 메시지를 보내는 코드는

 

erlang:send_after(5000, self(), stop).

 

유저 세션을 실제로 프로세스를 이용하여 구현하는 부분에서 sessio의 timeout을 체크할 때 위 방법을 이용

 

프로세스에 이름을 부여하려면 register(RegName, Pid) 함수 사용

 

 

6-1-5. Links

 

 

숫자 연산 문제 없이 동작한다.

현재 프로세스는 <0.59.0>

 

숫자가 아닌 값에 숫자를 더하려고 할 때

에러가 발생하였다.

프로세스가 종료되고, 얼랭 쉘은 자동으로 새로운 프로세스를 생성하여 얼랭 쉘의 Pid가 <0.65.0>으로 변경되었다.

 

 

 

만약 이런 코드가 프로세스 실행 중에 있다고 하면 해당 프로세스는 에러를 내면서 종료될 거다.

 

Link란 프로세스와 프로세스를 서로 연결하는 것이다.

프로세스를 생성한 후에 link(Pid) 함수를 이용해서 자신의 프로세스와 연결하거나,

프로세스를 생성할 때에 spawn 대신에 spawn_link 함수를 이용하면 연결이 된다.

 

link된 프로세스는 상대방 프로세스가 종료되면 종료 시그널을 전달받게 된다.

 

 

프로세스 내에서 에러가 발생했을 때 ERROR REPORT가 출력되지만

프로세스도 그대로이고 메시지가 도착하지도 않았다.

 

 

 

 

 

 

 

 

이것은 spawn_link를 사용해서 서로의 프로세스가 연결된 상태이다.

에러가 발생한 프로세스가 죽으면서 종료 시그널이 연결된 자신의 프로세스에게도 전달되어 자기 자신도 종료되었다.

그래서 프로세스 id가 <0.76.0>으로 변경된 것을 확인할 수 있다.

 

 

 

 

 

trap_exit 플래그를 true로 켜고 해보면 프로세스가 종료되지 않고, 대신 메시지를 전달 받는다.

해당 프로세스가 어떤 에러로 죽었는지에 대한 메시지이다.

이 방법을 이용해서 프로세스들 사이의 에러처리를 쉽게 구현할 수 있다.

 

6-1-6. API 추가

 

유저의 점수를 저장하는 API를 추가해보겠다.

/users/point로 전송하는데, session_key를 포함해서 전달해야 한다.

session_key는 로그인할 때에 서버에서 전달하도록 추가한다.

 

 

728x90
반응형

'Server' 카테고리의 다른 글

Kubernetes  (0) 2024.04.01
14. 유저 세션(3)  (0) 2018.01.18
12. 유저 세션(1)  (0) 2018.01.15
11. 데이터베이스(2)  (0) 2018.01.13
10. 데이터베이스(1)  (0) 2018.01.12