没有Websockets的即时消息系统的最佳方式[关闭]

Posted

技术标签:

【中文标题】没有Websockets的即时消息系统的最佳方式[关闭]【英文标题】:Best way for instant messaging system without Websockets [closed] 【发布时间】:2015-07-08 01:40:22 【问题描述】:

我目前正在从主机租用一个网络服务器。他们不允许 webrtc 或 node.js 或类似的东西。

我有一个使用 php/SQL/Ajax 的消息传递系统(当用户查看消息线程时,它每 60 秒获取一次新数据)但这似乎不是即时的,而且如果很多用户都在。

所以,我的问题是:有什么方法可以让我的用户实时更新数据,而不必不断地请求新数据,也不必使用 websockets?

我也想用通知和 cmets 来实现这一点,所以有很多 ajax 脚本每 x 秒请求一次数据似乎不是一个好主意。

【问题讨论】:

嗨,我认为您仍然可以使用 html5 网络工作者使用长轮询,不确定是否所有浏览器都支持。 【参考方案1】:

就个人而言,我建议您的问题的最佳解决方案是使用websocket。这是迄今为止最有效的方法。关于这一点:

他们不允许使用 webrtc 或 node.js 或类似的东西。

您可以找到一些可以让您运行 websocket 服务器的主机。例如https://www.digitalocean.com,您可以在其中设置/安装自己的主机套接字服务器。

我有一个使用 PHP/SQL/Ajax 的消息传递系统(当用户查看消息线程时,它每 60 秒获取一次新数据)但这似乎不是即时的,而且如果很多用户都在使用。

我认为您目前使用的这种方法是AJAX Polling,您可以在每个时间间隔持续请求数据库中的新更新。这对于最少的更新是可以的,但我个人不建议使用这种方法。从长远来看,每个时间间隔的每个请求都会影响您的应用程序速度和性能。这就是为什么你是对的:

我也想通过通知和 cmets 来实现这一点,因此让大量 ajax 脚本每 x 秒请求一次数据似乎不是一个好主意。

还有这个:

所以,我的问题是:有什么方法可以让我的用户实时更新数据,而不必不断地请求新数据,也不必使用 websockets?

是的,有一种方法可以使用SSE (Server-Sent Events)。查看来自w3fools :D 的示例。

但如果您再次考虑使用 websockets,您可以尝试使用 PHP 的 websocket:Ratchet。

也可以看看这个:Ways to make request/get realtime updates for a web application.

【讨论】:

以上是关于没有Websockets的即时消息系统的最佳方式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WebSockets 能耗

将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是啥? [关闭]

Windows 8 商店即时消息应用程序 [关闭]

Go 实现 WebSockets:1.什么是 WebSockets

Websocket 聊天实现

浅析企业即时通讯软件为企业带来的好处有哪些