推送通知以更改其他人的内存缓存/会话数据


Push notification to change someone else's memcache/session data

我想知道处理我网站用户将相互发送的评论推送通知的最佳方式。

当提交新评论时,它显然会存储在我的数据库中。但是,我还想将每个用户的评论存储在memcache中或会话数据(无论什么被认为是最好的?),以便每次用户访问我的网站/刷新页面时,他们都可以快速获取未读通知而不会命中我的数据库。

我想到的一种方法是在用户收到推送通知时,将 AJAX 请求发送回服务器以更新其 memcache/会话数据。

问题是如果用户未登录或当前未使用该站点,该怎么办。即使用户不在那里"接收"AJAX 请求,是否仍会发送 AJAX 请求?还是 AJAX 请求"等待"并在用户重新访问站点后立即发生?以这种方式处理通知首先是一个好主意吗?

你想保持你的PHP会话小。将大量数据填充到 中将导致性能下降。我不会为此目的使用它们。我最多使用它来存储他们上次检查评论的时间。

您也不执行推送通知,而是使用客户端轮询。您可以使用 Websocket 执行推送通知,但不能使用 AJAX(您可以通过长轮询来伪造它)。除非您的用户已登录并打开了指向您网站的浏览器,否则不会运行任何 Javascript 来启动 AJAX 调用以检查注释。

Websocket 或长轮询要求您使用 Apache 的辅助服务器。他们将耗尽您在Apache中的可用连接。

我假设您希望注释是持久的,因此请记住,"忘记"是Memcached的一项功能。可以将 Redis 设置为持久化数据。如果您使用 memcached 作为性能提升,您需要确定数据完整性是否重要(删除通知是可以的),或者您是否需要设计一些健壮性,以便他们始终收到通知。

希望这有帮助。