Websocket或Long Polling(使用AJAX)使用PHP检测数据库中的更改

时间:2013-02-07 12:41:20

标签: php jquery mysql ajax websocket

我的研究

我花了几个小时研究Google和SO,关于Websockets和Long Polling,它们的优缺点等等,但我还没有找到一个清晰解决方案。

我已经阅读了更多关于这个主题的文章然后我研究过的任何内容,包括这些(仅举几例):

  1. Ajax/PHP - should I use one long running script or polling?
  2. Long Polling using jQuery and PHP
  3. Poll Database for Changes - Ajax/jQuery
  4. 我还研究了以下内容:

    1. http://cometdproject.dojotoolkit.org/
    2. http://socket.io/
    3. 此问题的理由

      乍一看,这个问题可能看似重复或过于局部化,但是,经过我的广泛研究后,我无法收集足够的信息来做出明智的决定,确定哪条路线会失效。

      因此,我希望你们其中一位天才会帮助你们回答这个问题并与我们其他人分享你们的精彩知识: - )

      我的问题

      简而言之,我的问题确实在标题中;如果我试图检测数据库记录的更改,使用websocket(socket.io)或长轮询(jQuery和AJAX)是否更好?

      如果答案是websockets,那么请包括一个基本的例子,因为这些让我很困惑,即使是Google上的所有文章...

      此外,可能还有其他方法可以做得更好或更合适,如果是这样请分享,我愿意接受任何建议!


      其他信息

      这可能不会影响最终答案,但为了以防万一,我想解释一下我想要检测的内容以及可能需要考虑的一些事项。

      实际上,我正在尝试检测登录会话的任何更改。换句话说,如果数据库中的用户令牌已更改,则其超时已用完,那么它们已被注销,我想显示一条消息,通知他们。

      我认为这不会有所作为,但最终的代码需要适合SSL。使用AJAX很容易,但我不熟悉websockets方面。

      最初,我编写了一个系统,使用javascript从服务器检索超时,然后在timeout秒内,它会轮询服务器以查看timeout是否有过期。我认为这是完美的,直到我意识到它只在客户端计算机上的时间与服务器上的时间匹配时才有效。因此,我不得不废弃这一点: - (

      无论如何,我希望我的问题不是太局部化,我期待听到你的意见和答案。请不要浪费你的时间来帮助我使用PHP数据库代码或jQuery AJAX代码,除非它有复杂的部分,因为我能够自己编写这个部分,并且堆栈上有很多其他需要你的帮助比我多。如果他们是更好的解决方案,我对你的意见和/或如何使用websockets更感兴趣: - )。

2 个答案:

答案 0 :(得分:1)

这是我在长轮询和WebSocket API上看到的最佳比较:
http://www.websocket.org/quantum.html

正如上面的文章所述,WebSocket API远远优于长轮询(或任何其他伪双向通信),但一个缺点是浏览器支持仍然不存在(IE终于开始支持WebSocket API)在IE10)。

因此,如果您正在寻找一个全面的双向通信解决方案,请在可用时使用WebSocket API并回退到Ajax长轮询或任何彗星方法,而不是。

要回答您的问题,如果您只是偶尔进行服务器端/数据库查询(术语“偶尔”是相对的并且需要在您的系统上进行测试),那么简单的Ajax请求应该没问题。但是,如果您每隔10秒或更短时间使用WebSocket API对服务器进行锤击,那么使用WebSocket API绝对是理想的选择。

要回答您的上一个问题,使用WebSocket API可以100%使用SSL。只需使用wss协议而不是标准的ws协议,你就在那里。

答案 1 :(得分:0)

你写的部分" ...我试图检测数据库记录的变化......"。设计用于检测数据库更改的websockets中没有任何内容;这不是它的用途。)

在我看来,一个经济实现的变更代理(在您的情况下注销)在更改时通知侦听器,而不是以某种方式监视以检测该更改。

我的意思是db已被某些特定的脚本操作更改。我会考虑扩展每个操作以触发websocket事务。