好的,所以我试图构建类似于实时应用程序的东西(一旦添加就从数据库中获取新数据的东西),我能想出的唯一解决方案是不断使用 ajax 请求(通过 setInterval() javascript中的方法)每隔几秒钟检查一次新信息,但我很好奇这会给数据库或服务器带来什么样的压力。
做这样的事情会不会是矫枉过正,还是有更好的方法来构建实时应用程序?
好的,所以我试图构建类似于实时应用程序的东西(一旦添加就从数据库中获取新数据的东西),我能想出的唯一解决方案是不断使用 ajax 请求(通过 setInterval() javascript中的方法)每隔几秒钟检查一次新信息,但我很好奇这会给数据库或服务器带来什么样的压力。
做这样的事情会不会是矫枉过正,还是有更好的方法来构建实时应用程序?
您的问题归结为两个选项,long polling
或short polling
. 在第一个选项中,AJAX
向服务器发送请求。服务器搜索新的更新。如果找到,它会立即返回。否则它会休眠,比如说 0.5 秒,然后它会再次搜索更新。这会持续一段时间,然后发送数据数组中的任何内容。收到响应后,JS 可以采取适当的响应(如果有一些数据,也许可以使用它来操作DOM
),并发送另一个请求,并且无限地继续下去。这有一个缺点,即它在服务器端消耗大量资源。但是,如果您希望新的更新几乎立即反映(例如在 Facebook 中),这可能是您最好的选择。
在第二个选项中,正如您提到的,服务器端的负载减少了。但反映更新所花费的时间可能会更长。另外,如果用户的网速很慢,也会增加延迟。更不用说,重复请求我浪费了用户带宽(尽管如果您设计您的网站以确保只发送最少的数据,这可以得到缓解)。Websockets API 可能很方便,但据我所知,并非所有浏览器都完全支持它,最新版本除外。
如果您可以将 HTML 5 用于您的应用程序,我会推荐 Web 套接字。
更好的方法是使用 Web 套接字或类似方法。
例如,参见棘轮。