2011-08-23 8 views
2

사용자가 주제를 만들고 다른 주제에 대해 의견을 말할 수있는 웹 응용 프로그램이 있습니다 (여기서는 stackoverflow에서와 비슷합니다). 토론에 참여하는 사용자에게 알림을 보내고 싶습니다.전자 메일 알림 구현

사용자가 토론과 상호 작용할 때 실행되는 스크립트에 알림을 전달하는 것이 가장 쉬운 방법입니다. 매우 쉬운 것처럼 보일지라도 나는 사용자가 자신의 행동 상태를 알 때까지 모든 이메일 알림 (알림 스크립트 실행 완료)이 전송 될 때까지 기다릴 필요가 있기 때문에 가장 적절한 방법이라고 생각하지 않습니다.

내가 아는 또 다른 방법은 cronjob을 사용하여 알림 스크립트의 실행을 예약하는 것입니다. 알림이 관련성을 갖기 위해 스크립트는 3 ~ 7 분마다 실행되도록 예약되어 사용자가 적절한 시간에 알림을 받도록합니다.

내 관심사는 cronjob이 3 분마다 적절한 시스템 리소스를 사용하여 스크립트를 실행하도록 설정하고 내 응용 프로그램이 공유 호스팅 플랫폼에서 계속 실행되고 있다는 것을 고려해야합니다.

또한 코멘트 스크립트가 완료 될 때까지 기다리지 않고도 코멘트 스크립트가 실행을 계속하는 동안 코멘트 스크립트가 알림 스크립트를 트리거하거나 알림 스크립트에 알리는 시나리오를 가질 수 있습니다. 알림 스크립트. 이것이 달성 될 수 있다면, 나는 그것이 나를위한 최선의 선택 일 것이라고 생각한다.

감사합니다.

답변

0

알림 스크립트의 리소스 집약도가 높고 각 실행마다 수십 또는 수백 개의 메시지를 보내는 경우가 아니면 공유 호스트에서 3 ~ 7 분마다 일정을 계획하는 것에 대해 걱정할 필요가 없습니다. 실제로 3 분 동안 예약하고 사이트 성능이 저하되는 경우 4 분으로 늘려 리소스를 25 % 줄입니다. 그래도 문제가되지는 않을 것입니다.

백그라운드 프로세스를 시작하는 경우 시스템 호출 exec()을 사용하여이를 수행 할 수 있습니다. 훌륭한 답을 얻으려면 this question으로 연결됩니다.

0

각 "토론 상호 작용"에 "후크"를 추가하는 것이 가장 깨끗한 접근 방법이며, 사용자를 기다리지 않게하는 한 가지 방법은 HTTP 응답에 Content-Length 헤더를 보내는 것입니다. 잘 작동하는 HTTP 클라이언트는 지정된 수의 8 진수를 읽고 연결을 닫으므로 올바른 Content-Length HTTP 헤더 (및 ignore_user_abort를 설정)로 "상태"응답을 보내면 최종 사용자는 서버 쪽 스크립트가 실제로 즐거운 방법으로 계속 진행되고 종료하기 전에 전자 메일 알림 (아마도 몇 분 동안)을 생성합니다.

0

요청을 처리하는 동일한 프로세스에서 전자 메일을 보내는 것이 방법이라고 동의하지는 않습니다. 일반적으로 일을 단순하게 유지하는 것이 가장 좋습니다. 가능한 한 빨리 요청을 처리하고 백그라운드 프로세스가 모든 힘든 일을하도록하십시오. 트래픽이 증가하고 서버가 사용량이 많아지면이 접근 방식은 대기 시간을 줄이고 사용자는 더 행복해집니다. 나중에 버그 수정 및 리팩토링에 도움이 될 우려 사항을 분리하는데도 도움이됩니다.

개인적으로 필자는 백그라운드에서 주기적으로 실행되는 스크립트를 만들어 모든 스레드에서 새 작업을 확인합니다. 스레드에 새로운 작업이있는 경우 스크립트는 모든 참가자에게 알림 전자 메일을 보낼 수 있습니다. 이렇게하면 요청을 처리하는 데 사용 된 논리에서 전자 메일을 보내는 논리가 분리되고 물리적으로 분리됩니다. 예를 들어 SMTP 서버가 갑자기 응답하기 시작하면 요청 응답 시간에 아무런 영향을 미치지 않습니다.또한 사용량이 많은 시간대에 서버가 사용량이 많아지면이 스크립트의 실행을 중지하고 서버가 요청 처리에 집중할 수있게 할 수 있습니다.

이 스크립트를 실행하려면 물론 CRON을 사용하고 4 분마다 한 번씩 실행되도록 설정할 수 있습니다. 그러나 스크립트가 4 분보다 오래 걸리면 어떻게 될까요? 결국 두 스크립트가 동시에 실행되어 일부 사용자에게 동일한 전자 메일을 두 번 보낼 수 있습니다. 이것에 대한 한가지 해결책은 C에서 어떤 스크립트 (PHP, Python, 뭐든지)를 주기적으로 실행할 수있는 데몬 인 The Fat Controller를 사용하는 것입니다. 이것은 기본적으로 모든 것에 대한 대몬입니다. 결정적으로, 이전 인스턴스가 종료 된 후 x 초 후에 새 인스턴스를 실행할 수 있으므로 여러 인스턴스에 대해 걱정할 필요가 없습니다.

지방 컨트롤러는 매우 구성이 가능하며 모든 종류의 모드로 실행할 수 있으며 여러 병렬 프로세스를 처리 할 수도 있습니다. 웹 사이트에서 사용 사례 및 사용 사례에 대해 자세히 알아볼 수 있습니다.

http://www.4pmp.com/fatcontroller/