웹 프로젝트에 일종의 메시징 큐 시스템을 구현하고 싶습니다. 나는 이것을 수행하는 가장 좋은 방법이 무엇인지 궁금 할뿐입니다. 그것은 데이터베이스 시스템으로 MySQL을 사용하여 PHP (Yii Framework)로 작성되었습니다.메시징 큐를 구현하는 가장 좋은 방법
는 아이디어 :
- 사용자 1이 사용자 2에게 메시지를 보내지 만 메시지가 미래에 배치됩니다 (예 : 2013년 2월 11일 14시 31분)
- 사용자 2는 메시지를 수신 사용자 1의받은 편지함에 02-11-2013 14:31에 수신 된이 새 메시지에 대한 알림 이메일을 수신합니다.
나는이 작업을 수행하는 2 가지 방법으로 생각 : 메시지가 사용자 2. 사용자에게 전달해야한다
은 날짜와 시간에 '메시지'테이블에 사용자 1에서 메시지를 삽입 2 이 날짜와 시간이 현재 날짜와 시간 (
WHERE addTime <= NOW()
)보다 작은 경우에만 읽을 수 있습니다.'messageQueue'테이블에 사용자 1의 메시지를 삽입하십시오. 이것은 미래에 배치되어야하는 모든 메시지를 포함하는 테이블입니다. cronjob (매분 실행됩니다)은 현재 시간보다 작은 날짜와 시간의 모든 메시지를 'message'테이블에 놓고 'messageQueue'테이블에서 삭제합니다.
- 방법 1 : 방법 2
- 사용자 2에게 알림 이메일을 보낼 수있는 방법 : 이메일이 사용자에게 직접 2.
단점 보낼 수 있습니다 당신은해야합니다 매분마다 실행되는 cronjob을 설정하십시오 (메시지는 앞으로 1 분의 정밀도로 배치 될 수 있습니다). 알림 전자 메일은 직접 보낼 수 있지만 많은 메시지가있는 무거운 시스템이됩니다. cronjob이 1 분보다 오래 걸리면 서로 겹쳐서 결국 서버가 종료 될 수 있습니다.
아무에게도이 작업을 수행 할 생각이 있습니까? 실제로 서버/데이터베이스에서 푸시 기능을 찾고 있는데이 스크립트는 새로운 메시지가 사용자 2에게 전달되고 사용자 2에게 전자 메일이 전송되어야한다고 내 스크립트에 알립니다.
php-amqplib의 문서를 보라 할 수 있습니다? 당신은 무한 루프를 만들고 있습니다. 그것은 생각이지만, 많은 것들이 잘못 될 수있는 것처럼 들립니다. 스크립트가 두 번 실행되거나 서버 재부팅으로 스크립트가 종료되면 어떻게됩니까? – davey
방금 아이디어를주었습니다. CRON 작업이 가장 좋은 해결책이 될 것 같습니다. – Piotr
나는 알고있다;).이전에 사용했지만 메시지를 미세한 정밀도로 전달해야합니다. 당신은 cronjob을 가능한 한 겹쳐서 매분마다 실행하도록함으로써 그 일을 할 수 있습니다. – davey