gpt4 book ai didi

php - Websocket 或长轮询(使用 AJAX)使用 PHP 检测数据库中的更改

转载 作者:IT王子 更新时间:2023-10-28 23:44:50 26 4
gpt4 key购买 nike

我的研究

我花了数小时在 Google 和 SO 上研究 Websockets 和长轮询,它们的优缺点等,但我还没有找到一个明确的解决方案。

我阅读的关于这个主题的文章比我研究过的任何文章都多,包括这些(仅举几例):

  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

我还研究了以下内容:

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

这个问题的理由

乍一看,这个问题似乎重复或过于局限,但是,经过我广泛的研究后,我无法收集到足够的信息来做出明智的决定,决定走哪条路。

因此,我希望你们中的一位 SO 天才愿意花时间回答这个问题,并与我们其他人分享您的绝妙知识:-)

我的问题

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

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

此外,可能还有其他更好或更适合的方法,如果有请分享它们,我愿意接受任何建议!


附加信息

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

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

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

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

无论如何,我希望我的问题不要太局限,我期待听到您的意见和答案。请不要浪费你的时间帮助我处理 PHP 数据库代码或 jQuery AJAX 代码,除非它有复杂的部分,因为我有能力自己编写这部分,而且 Stack 上还有很多其他需要你的帮助比我多。我对您的意见和/或如果 websockets 是更好的解决方案如何实现这一点更感兴趣:-)。

最佳答案

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

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

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

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

为了回答您的最后一个问题,SSL 100% 可用于 WebSocket API。只需使用 wss 协议(protocol)而不是标准的 ws 协议(protocol),就可以了。

关于php - Websocket 或长轮询(使用 AJAX)使用 PHP 检测数据库中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com