【问题标题】:A facebook-like-notification system in php一个类似 facebook 的 php 通知系统
【发布时间】:2010-08-30 21:03:24
【问题描述】:

如何建立类似 facebook 的通知系统: - 用户 A 向用户 B 写消息 - 数据库上的侦听器将消息路由到 userB - 在userB界面,消息立即出现

如何在 php 中做到这一点?

非常感谢,

问候

【问题讨论】:

  • 我非常感谢您的想法。你有一段代码要分享吗?再次感谢。
  • 这是一个相当复杂的系统。最好的办法是自己尝试一下,并询问你卡在哪里的具体问题。如果您希望我为您写信或坐下来进行虚拟一对一,我很乐意向您收取我的标准费用。

标签: php javascript database ajax notifications


【解决方案1】:

我不建议您使用轮询或尝试使用 PHP 实现基于推送的解决方案,如果您将有任何可观的流量。发生的情况是最终所有 PHP 进程都被阻塞,然后你就不能再提供 Web 请求了。

查看 node.js、cometd 或其他基于推送的解决方案。如果您需要一些简单的东西并且需要快速启动和运行,我推荐http://pusherapp.com/。他们有一个可用的 PHP 客户端和超级简单的 API。

【讨论】:

    【解决方案2】:

    我有一个运行良好的系统。它基本上有这样的设置:

    notification_id
    用户ID
    模块
    动作类型
    添加者
    阅读
    读取日期
    添加了

    这是一种简单的方法。 user_id 是给谁的, added_by 是执行操作的用户 id。 Module 是执行它的位置,而 action_type 是发生了什么(评论、删除、添加等)。 Read 是它是否已经被查看过,read_date 是它被查看的时间。

    然后我有一个类可以根据上面的值构建措辞。

    然后我设置了一个 crontab,它将在这么多天后清理数据库中的旧通知。

    【讨论】:

      【解决方案3】:

      您可以通过以下两种方式之一进行此操作。在 PHP 中,最简单的方法是“轮询”。较新的整洁方法是使用带有 Comet 服务器的 HTTP 推送。但这对 PHP 来说不是很好。

      要使用轮询,您只需更新数据库中的表,将用户A 的消息标记为要传递给用户b。您有一个脚本通过 ajax 每隔几秒钟运行一次,该脚本会轮询数据库以获取 userb 客户端上的消息。如果消息在那里,则填充它。这是非常低效的。

      【讨论】:

        【解决方案4】:

        Comet 服务器用 PHP 编写并不是那么简单,但可以使用 sleeps 来实现。 还有一些有用的套接字函数:

        请注意,您应该注意时间限制。也许您应该在一段时间后停止挂起并发出新请求,除非您可以禁用这些请求的时间限制。

        解决方案也可能取决于环境。您可能无法在通常的共享虚拟主机上做很多有用的事情。

        【讨论】:

        • 这是一个可怕的想法。 PHP 不适合长轮询。
        【解决方案5】:

        正如 akellehe 所提到的,如果您的用户可能长时间停留在同一页面上,您可以简单地使用 Ajax 进行轮询以查找新内容。如果不需要绝对实时交付,那么在页面重新加载时检查新通知会更有效 - 特别是如果您缓存(例如 memcached)等待用户的总事件并且仅在事件中使该计数无效一些东西被添加到他们的通知队列中。这将为您节省大量空手的数据库查询。

        【讨论】:

          【解决方案6】:

          现在很有可能。我知道这个答案来得很晚,但它会帮助那些将查看此页面寻求帮助的人。检查下面的链接以获得很棒的教程Real Time Notification Like Facebook

          【讨论】:

            【解决方案7】:

            现在最好的解决方案是使用 socket.io (http://socket.io/)。它会自动选择传输数据的最佳(和可用!)方式,包括:WebSockets、Adobe Flash Socket、Ajax 轮询。 您真的不用担心客户端通信方法的可用性。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-01-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-22
              • 2011-08-02
              相关资源
              最近更新 更多