【发布时间】:2013-01-22 23:14:01
【问题描述】:
我的研究
我花了数小时在 Google 和 SO 上研究 Websockets 和 Long Polling、它们的优缺点等,但我还没有找到一个明确的解决方案。
我已经阅读了更多关于这个主题的文章,而不是我曾经研究过的任何文章,包括这些(仅举几例):
- Ajax/PHP - should I use one long running script or polling?
- Long Polling using jQuery and PHP
- Poll Database for Changes - Ajax/jQuery
我还研究了以下内容:
这个问题的理由
乍一看,这个问题似乎是重复的或过于本地化,但是,经过我的广泛研究,我无法收集足够的信息来做出明智的决定,决定走哪条路线。
因此,我希望你们中的一个天才会花时间回答这个问题,并与我们其他人分享你的精彩知识:-)
我的问题
简而言之,我的问题确实在标题中;如果我试图检测对数据库记录的更改,是使用 websocket (socket.io) 还是长轮询 (jQuery 和 AJAX) 更好?
如果答案是 websockets,那么请提供一个基本示例,因为这些确实让我感到困惑,即使是 Google 上的所有文章...
此外,可能还有其他更好或更适合的方法,如果有,请分享,我愿意接受任何建议!
其他信息
这可能不会影响最终答案,但以防万一,我想解释一下我试图检测的内容以及可能需要考虑的一些事项。
实际上,我正在尝试检测登录会话的任何更改。换句话说,如果数据库中的用户令牌已更改或他们的超时已用完,则他们已被注销,我想显示一条消息通知他们。
我认为这不会产生影响,但最终代码需要适合 SSL。使用 AJAX 很容易,但我对 websockets 方面不熟悉。
最初,我编写了一个系统,它使用 javascript 从服务器检索超时,然后在timeout 秒内,它会轮询服务器以查看 timeout 是否已过期。我认为这是完美的,直到我意识到它只有在客户端计算机上的时间与服务器上的时间匹配时才有效。因此我不得不放弃这个:-(
无论如何,我希望我的问题不要太本地化,我期待听到您的意见和答案。请不要浪费您的时间来帮助我编写 PHP 数据库代码或 jQuery AJAX 代码,除非它有复杂的部分,因为我有能力自己编写这部分,并且堆栈上还有很多其他需要您的帮助比我多。如果它们是更好的解决方案,我对您的意见和/或如何使用 websockets 实现这一点更感兴趣:-)。
【问题讨论】:
-
不完全是一个答案,但我使用pubnub.com 得到了非常好的结果它很容易实现而且速度很快。
-
您可以考虑使用 redis 数据库,这样您就可以在数据更改时触发事件,并与客户端建立实时双向连接以使用 socket.io 扩展所需数据
-
@Chris 感谢您的意见,但我真的不想为自己能做的事情付钱
-
@eyurdakul 害怕 Redis 不是一个选项,这个应用程序链接到一个 SQL 数据库,它也链接到一个桌面应用程序,所以我不能移动到不同的数据库引擎:-(
-
关于你的粗体超时问题:使用 UTC 时间而不是客户端时间来实现这一点。
标签: php jquery mysql ajax websocket