2009-08-31 5 views
12

Joe Armstrong의 책을 읽고 Kevin Smith 스크린 캐스트를 보았습니다. 저는 단일 gen_server와 단일 감독자로 구성된 간단한 OTP 응용 프로그램을 OTP 응용 프로그램으로 묶었습니다.Erlang/OTP 응용 프로그램에서 gen_server를 사용해야하는 경우

이제 mochiweb을보고 new_mochiweb.erl 스크립트를 사용하여 샘플 프로젝트 [helloworld]를 만들었습니다. 내가보기에 샘플 샘플 OTP 앱과 다르지 않은 소스 코드 검색 [OTP 애플리케이션이 있습니다. 관리자가 있습니다] 생성 된 helloworld.erl 및 helloworld_web.erl 파일은 gen_server 동작을 구현하지 않습니다. 단지 표준 Erlang 모듈입니다.

OTP 응용 프로그램 구성 요소를 빌드 할 때 gen_server를 사용하는 것이 좋습니다. 왜 mochiweb은 OTP 애플리케이션 및 감독자 행동을 사용하지만 gen_server는 사용하지 않을 수 있습니까?

답변

4

mochiweb_socket_server라는 gen_server가 있습니다. 생성 된 모듈은 들어오는 요청을 수신 할 때 gen_server가 호출되는 "콜백 모듈"입니다.

10

다시 시작 전략하에있는 프로세스에 대해 OTP/gen_servers를 사용합니다. 다시 시작한 프로세스 인 은 사용자 컨트롤에 있습니다.

웹 브라우저 연결을 나타내는 프로세스에는 해당되지 않습니다. 이 프로세스가 종료되면 서버가 다시 시작할 수있는 방법이 없습니다. 따라서 OTP에서 실행하면 무의미합니다.

Mochiweb (및 Yaws)은 모두 수신 대기 포트에 바인딩하기 위해 gen_servers를 사용하고 새 연결을 처리하기 위해 감독되지 않은 프로세스를 생성합니다.

+3

stdlib 응용 프로그램은 OTP 응용 프로그램입니다. 시작하면 작동중인 부품이 없습니다. 그것은 평범한 라이브러리 응용 프로그램입니다.로드하는 모듈을위한 것이기 때문에 다른 OTP 응용 프로그램이 모든 모듈을 가져올 수 있습니다. 따라서 모듈을 도입 할 때 OTP를 사용해야하는 이유가 여전히 있습니다. – Christian

+0

네 말이 맞아, 나는 내 언어로 약간 슬퍼하고 있었어. 디렉토리와 물건을 사용하여 일반적인 OTP 방식으로 모든 코드를 패키징해야한다.하지만 때로는 올바른 일은 gen_server 그것을 시작하십시오. –

관련 문제