2013-10-08 3 views
1

웹 프로젝트에 일종의 메시징 큐 시스템을 구현하고 싶습니다. 나는 이것을 수행하는 가장 좋은 방법이 무엇인지 궁금 할뿐입니다. 그것은 데이터베이스 시스템으로 MySQL을 사용하여 PHP (Yii Framework)로 작성되었습니다.메시징 큐를 구현하는 가장 좋은 방법

는 아이디어 :

  • 사용자 1이 사용자 2에게 메시지를 보내지 만 메시지가 미래에 배치됩니다 (예 : 2013년 2월 11일 14시 31분)
  • 사용자 2는 메시지를 수신 사용자 1의받은 편지함에 02-11-2013 14:31에 수신 된이 새 메시지에 대한 알림 이메일을 수신합니다.

나는이 작업을 수행하는 2 가지 방법으로 생각 : 메시지가 사용자 2. 사용자에게 전달해야한다

  1. 은 날짜와 시간에 '메시지'테이블에 사용자 1에서 메시지를 삽입 2 이 날짜와 시간이 현재 날짜와 시간 (WHERE addTime <= NOW())보다 작은 경우에만 읽을 수 있습니다.

  2. 'messageQueue'테이블에 사용자 1의 메시지를 삽입하십시오. 이것은 미래에 배치되어야하는 모든 메시지를 포함하는 테이블입니다. cronjob (매분 실행됩니다)은 현재 시간보다 작은 날짜와 시간의 모든 메시지를 'message'테이블에 놓고 'messageQueue'테이블에서 삭제합니다.

    1. 방법 1 : 방법 2
    2. 사용자 2에게 알림 이메일을 보낼 수있는 방법 : 이메일이 사용자에게 직접 2.

    단점 보낼 수 있습니다 당신은해야합니다 매분마다 실행되는 cronjob을 설정하십시오 (메시지는 앞으로 1 분의 정밀도로 배치 될 수 있습니다). 알림 전자 메일은 직접 보낼 수 있지만 많은 메시지가있는 무거운 시스템이됩니다. cronjob이 1 분보다 오래 걸리면 서로 겹쳐서 결국 서버가 종료 될 수 있습니다.

아무에게도이 작업을 수행 할 생각이 있습니까? 실제로 서버/데이터베이스에서 푸시 기능을 찾고 있는데이 스크립트는 새로운 메시지가 사용자 2에게 전달되고 사용자 2에게 전자 메일이 전송되어야한다고 내 스크립트에 알립니다.

답변

0

CURL CRON 대신 "CRON JOB SCRIPT"를 요청할 것입니다. 이전이 완료된 후에 호출됩니다. 스크립트가 1 분 내에 실행될 경우 CURL 요청을 지연시킬 수 있습니다.

+0

php-amqplib의 문서를 보라 할 수 있습니다? 당신은 무한 루프를 만들고 있습니다. 그것은 생각이지만, 많은 것들이 잘못 될 수있는 것처럼 들립니다. 스크립트가 두 번 실행되거나 서버 재부팅으로 스크립트가 종료되면 어떻게됩니까? – davey

+0

방금 ​​아이디어를주었습니다. CRON 작업이 가장 좋은 해결책이 될 것 같습니다. – Piotr

+0

나는 알고있다;).이전에 사용했지만 메시지를 미세한 정밀도로 전달해야합니다. 당신은 cronjob을 가능한 한 겹쳐서 매분마다 실행하도록함으로써 그 일을 할 수 있습니다. – davey

0

AMQP 모델 (http://www.rabbitmq.com/)을 구현하는 RabbitMQ를 사용해보십시오. 노출 된 응용 프로그램의 컨텍스트를 감안할 때 약간 "과잉"일 수 있습니다. 이미 확실히 알고있는 경우

그러나, 이러한 메시징 시스템이 반드시 빨리 성장해야합니다, 당신은 당신은 스크립트가 완료 된 후 자체 호출 의미

+0

고마워, 재밌어! 나는 그것을 보게 될 것이다. 그러나 실제로 나는 그것이 내가 지금까지 보았던 것에 대해 약간 과잉이라고 생각한다. – davey

관련 문제