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

Ben*_*rey 11 php mysql ajax jquery websocket

我的研究

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

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

  1. Ajax/PHP - 我应该使用一个长时间运行的脚本还是轮询?
  2. 使用jQuery和PHP进行长轮询
  3. 轮询数据库的变化 - Ajax/jQuery

我还研究了以下内容:

  1. http://cometdproject.dojotoolkit.org/
  2. http://socket.io/

这个问题的理由

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

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

我的问题

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

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

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


附加信息

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

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

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

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

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

Har*_*San 1

这是我见过的关于长轮询和 WebSocket API 的最佳比较: http:
//www.websocket.org/quantum.html

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

因此,如果您正在寻找完整的双向通信解决方案,请在可用时使用 WebSocket API,在不可用时使用 Ajax 长轮询或任何您喜欢的 Comet 方法。

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

回答你的最后一个问题,SSL 对于 WebSocket API 是 100% 可用的。只需使用 wss 协议而不是标准 ws 协议即可。