11

在我的网站上,我想像 Stackoverflow 那样推送评论通知。Amazon SNS/SQS 似乎提供了一个框架来执行此操作,但我很难在 Web 上找到任何代码/解释,而不是“hello world”等价物。

从阅读 AWS SNS/SQS 文档看来,我需要以下内容:

逻辑:

  1. 发表评论/回答新问题
  2. 创建主题(仅适用于第一条评论/答案)
  3. 发布消息
  4. 订阅主题

发表评论的页面上的 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?

显然,这不是一个完整的演示,并且可能有一些不正确的函数调用,但我想知道是否有人可以帮助建立这个?

4

1 回答 1

3

你的评论暗示你不喜欢 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 个用户,到目前为止,这种方法还没有被证明是该站点的瓶颈。我也不指望它很快。

于 2012-07-18T23:45:54.657 回答