没有Websockets的即时消息系统的最佳方式

时间:2015-04-29 00:40:39

标签: php mysql ajax

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

我有一个使用PHP / SQL / Ajax的消息传递系统(当用户正在查看消息线程时,它每60秒获取一次新数据)但这看起来不是即时的,而且看起来像是&#39 ;如果有很多用户,服务器不是很方便。

所以,我的问题是:有没有办法让我的用户可以直接更新数据而无需不断地请求新数据而不必使用websockets?

我也希望通过通知和评论来实现这一点,因此每隔x秒钟有很多ajax脚本请求数据并不是一个好主意。

1 个答案:

答案 0 :(得分:4)

就个人而言,我建议您解决问题的最佳方法是使用websocket。到目前为止,这是最有效的方式。关于这个:

  

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

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

  

我有一个使用PHP / SQL / Ajax的消息传递系统(当用户正在查看消息线程时,它每60秒获取一次新数据)但这看起来不是即时的,而且看起来像是&#39 ;如果有很多用户,服务器不太方便。

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

  

我也希望通过通知和评论来实现这一点,因此每隔x秒就有大量的ajax脚本请求数据并不是一个好主意。

而且:

  

所以,我的问题是:我有什么方法可以直接向用户更新数据,而无需不断地请求新数据而不必使用websockets?

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

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

同时检查一下:Ways to make request/get realtime updates for a web application.