我应该使用AJAX还是WebSockets。

时间:2015-10-14 12:26:09

标签: ajax node.js websocket network-programming

HTTP vs WebSockets的欢乐问题再次出现,但即使在退出数百篇versus博客帖子,SO问题等等之后,也等等。 ..我仍然完全不知道我应该为我们的申请工作。在这篇文章中,我将提供有关应用程序功能的信息,以及当前在我们的应用程序中使用的请求/响应的类型。

目前,我们的应用程序是一项草率的工作,使用AngularJSAJAX请求一起投放到运行Apache的{​​{1}}服务器,即PHP。随着我们的应用程序的推出,我注意到,当服务器处于任何负载状态时,我们都会遇到响应时间问题。这可能与我们的服务器的草率架构,硬件以及我们的MySQL数据库未经过精确优化这一事实有关。

然而,有了这样一个忠实的粉丝群,投资者看到了我们的应用程序的潜力,让我们有机会推出XAMPP我一直在努力学习如何将这个应用程序变成一个低级强国延迟可扩展性。老实说,最好的选择是2.0,但不幸的是,我是一个业余爱好者,还有一个没有多少经验的单人军队。

经过一番广泛的研究,我这次决定使用hire someone with experience编写后端。但是,我很难决定NodeJSHTTP。这是服务器/客户端之间完成的事务类型。

  • 客户端以JSON格式向服务器发送请求。请求有几个不同的东西。

    • 请求ID(用于处理基于请求的逻辑)
    • 与请求ID关联的数据。
  • 服务器接收请求,轮询数据库(如有必要),然后以JSON格式响应客户端。有时服务器正在向客户端提供文件。即Base64格式的图像。

目前,应用程序(在使用时)每次更改接口时都会向服务器发送一个请求,平均每隔几秒就会对我们的应用程序发送一次请求。我们接口上的每个操作都会向服务器发送另一个请求。应用程序还会每8秒发送一次检查通知/消息的请求(或两秒钟,具体取决于它们是否在消息传递接口上)。

目前,通过Websockets与我们的应用程序的stated连接,我看到了stateless连接带来的好处。

  • 如果说明了连接,我可以消除对通知和消息的请求,因为服务器可以告诉客户端何时可用。这可以消除每秒仅x(n)/4个服务器的请求。

  • 处理类似于与服务器断开连接的事情就像尝试重新连接一样简单,与处理每个请求的超时/错误相反,这只能在套接字上处理。

  • 通过删除数据库交互的安全密钥可以获得额外的安全性,这可以防止{_ 1}} session_key的可能性并使用它来操纵或访问其他用户数据。由于Hijacking(?)设置中没有状态,因此只需要session_key。

但是,我是通过TCP游戏服务器模拟开始学习编程的人。所以我理解STATED连接的AJAX好处,而我根本不了解STATELESS连接的好处。我知道他们都有自己的好处和怪癖,但我很好奇对我们来说最好的方法是什么。

我们主要寻找可伸缩性,因为我们已经启动了本地应用程序,并在48小时内成功地为近10,000名用户设置了瓶颈。幸运的是,我宣布这是一个some,并且在得知我自己作为一个学习项目完成所有工作后,用户正在减少我的麻烦。我在考虑改进应用程序的前端和后端时禁用了注册。

重要:

如果使用WebSockets,我们是否可以BETA使用asynchronously从服务器下载图片?例如,我可以使用AJAX为5个不同的图像向服务器发出5个请求,并且它们都将立即开始下载,使用规定的连接我是否必须等待每张照片流式传输才能转移到下一个请求?这只是一个瓶颈 - 单个用户,还是等待请求完成的每个用户?

2 个答案:

答案 0 :(得分:2)

这一切都归结为您的应用程序如何工作以及如何扩展。我会使用裸WebSockets而不是任何包装器,因为它是一个已经很容易使用的API,当你需要向外扩展时,你的手不会受到束缚。

这里有一些链接会给你提供见解,虽然不是你问题的具体答案,因为正如我所说,这取决于你的期望。

Hard downsides of long polling?

WebSocket/REST: Client connections?

Websockets, and identifying unique peers[PHP]

How HTML5 Web Sockets Interact With Proxy Servers

答案 1 :(得分:2)

如果你的问题是我应该使用HTTP over Websockets吗?,响应是:你不应该

即使它因为你没有浪费时间打开连接而更快,你也会失去所有的HTTP规范,如动词(GETPOSTPATCH,{{1 }},...),路径,正文以及响应,状态代码。这种接缝很简单,但你必须重新实现这些协议的全部或部分内容。

所以你应该使用Ajax,只要它是一个ponctual请求。

当您需要每2秒发出一次ajax请求时,您实际上需要服务器向您发送数据,而不是您请求服务器检查Api更改(如果已更改)。所以这表明你应该实现一个websocket服务器。