Push-уведомления в PHP с использованием Amazon SNS/SQS?

На моем сайте я бы хотел сделать push-уведомления о комментариях, например, Stackoverflow. Amazon SNS/SQS, похоже, создает основу для этого, но мне трудно найти какой-либо код/​​объяснение в Интернете для чего-либо, кроме эквивалента "привет мир".

Из чтения документации AWS SNS/SQS, похоже, мне нужно следующее:

логика:

  • отправить комментарий/ответить на новый вопрос
  • создать тему (только для первого комментария/ответа)
  • опубликовать сообщение
  • подписаться на тему

PHP на странице, где размещены комментарии (http://mysite.com/postCommentOrAnswer.php):

$comment=$_POST['comment']; //posted comment
require_once 'application/third_party/AWSSDKforPHP/sdk.class.php';
$sns = new AmazonSNS();

$response = $sns->create_topic('SO-like-question-12374940'); //create topic

$response = $sns->publish(
  'arn:aws:sns:us-east-1:9876543210:SO-like-question-12374940',
  $comment
);  //publish comment

$response = $sns->subscribe(
  'arn:aws:sns:us-east-1:9876543210:SO-like-question-12374940',
  'https ',
  'https://mysite.com/notificationsReceiver'
); // Subscribe to notifications

PHP на странице, где получены уведомления (http://mysite.com/notificationsReceiver.php):

no idea, thoughts?

Очевидно, что это не близок к полной демонстрации и, вероятно, имеет некоторые неправильные вызовы функций, но мне было интересно, сможет ли кто-нибудь помочь в этом?

Ответ 1

Ваш комментарий подразумевает, что вы не привязаны к SQS, поэтому я отвечаю на решение MySQL.

Если вы не имеете дело с таким количеством трафика, что на самом деле сообщения будут попадать в очередь, я бы рекомендовал просто простой подход к таблице MySQL.

У меня есть сайт с таблицей уведомлений MySQL, который выглядит так:

CREATE TABLE `notification` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `user_id` INT(11) NOT NULL,
    `notification_type` ENUM('inline','popup') NOT NULL DEFAULT 'inline',
    `html` TEXT NOT NULL,
    `entered_date` DATETIME NOT NULL,
    `display_date` DATETIME NOT NULL,
    `show_once` TINYINT(1) NOT NULL DEFAULT '0',
    `closable` TINYINT(1) NOT NULL DEFAULT '1',
    `destroy_on_close` TINYINT(1) NOT NULL DEFAULT '1',
    PRIMARY KEY (`id`),
    INDEX `user_id` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM

Эта таблица проверяется при загрузке страницы и отображается соответствующее уведомление в соответствии с данными уведомления. Вставка выполняется, когда на веб-сайте происходят различные действия или события.

У меня более 10 000 пользователей, и до сих пор этот подход не оказался узким местом для сайта. Я тоже не ожидаю этого в ближайшее время.