이벤트를 가입자에게 전달하는 이벤트 관리자 프로세스가 있습니다 (예 : http_session_created, http_sesssion_destroyed). Pid가 명명 된 프로세스 대신 사용되면 이벤트 관리자와 함께 작동하는 함수에 넣어야하지만 명명 된 프로세스가 사용되면 코드가 더 명확 해집니다.erlang의 이벤트 관리자 프로세스입니다. 명명 된 프로세스 또는 Pids?
어떤 변형이 맞습니까?
감사합니다.
이벤트를 가입자에게 전달하는 이벤트 관리자 프로세스가 있습니다 (예 : http_session_created, http_sesssion_destroyed). Pid가 명명 된 프로세스 대신 사용되면 이벤트 관리자와 함께 작동하는 함수에 넣어야하지만 명명 된 프로세스가 사용되면 코드가 더 명확 해집니다.erlang의 이벤트 관리자 프로세스입니다. 명명 된 프로세스 또는 Pids?
어떤 변형이 맞습니까?
감사합니다.
프로세스를 명명하는 프로세스에는 실제 차이점이 없지만 프로세스를 등록하면 프로세스가 글로벌하게됩니다. 본질적으로 당신은 시스템에 누군가가 사용할 수있는 글로벌 서비스가 있다고 말하고 있습니다.
당신의 설명에서 당신의 이름을 그들에게 줄 수 있습니다. 이 경우 나는 당신이 들고 다니는 다른 모든 주 데이터와 함께 그들의 pid를 레코드에 넣을 것입니다. 이것은 프로세스의 유형을 훨씬 잘 나타냅니다.
"구독자"프로세스의 고정 세트가있는 경우 등록 된 이름 IMO를 사용하십시오.
반대로 구독자가오고가는 게시/구독 종류가 있다면 그 정보를 추적하기위한 인프라가 필요하며이 시점부터 Pid() 또는 이름.
등록 된 이름을 사용하는 단점 중 하나는 "충돌"을 피하기 위해 코드 기반에서 추적해야한다는 것입니다. 따라서 여러분에게 달려 있습니다. 개인적으로, 저는 지명 된 프로세스를 선호하는 경향이 있습니다. 여러분이 말한 것처럼, 코드를 더 명확하게 읽게합니다. OTP는 상관 없어요.
상태의 레코드에서 이벤트 관리자 참조를 전달하면 해당 필드의 등록 된 이름에 대해 원자를 계속 사용할 수 있습니다. 따라서 이벤트 관리자가 충돌하여 이름을 다시 시작하면 자동으로 최신 관리자에게 이벤트를 보냅니다. 이벤트 관리자의 가동 중지 시간 동안 경고를 보내면 badarg 예외가 발생할 위험이 있습니다. – Christian
물론 가능합니다. 나는 전 세계적으로 언급 될 의도가 없다면 사물의 글로벌 이름을주는 것을 좋아하지 않는다. 원래의 질문에서 그렇다고 말할 수는 없다. – rvirding