【问题标题】:Socket.io vs AJAX Use casesSocket.io 与 AJAX 用例
【发布时间】:2013-01-18 01:37:49
【问题描述】:

背景:我正在使用 NodeJS + Express 构建一个网络应用程序。客户端和服务器之间的大部分通信都是 REST(GET 和 POST)调用。我通常会使用 https://developers.google.com/appengine/articles/rpc 中提到的 AJAX XMLHttpRequest。而且我似乎不明白如何让我的 RESTful 服务也用于 Socket.io。

我的问题是

  • 应该在哪些场景中使用 Socket.io 而不是 AJAX RPC?
  • 有没有一种直接的方法可以让它们一起工作。至少对于 Expressjs 风格的 REST。
  • 在非实时 Web 应用程序上使用 socket.io(如果使用 websockets -- TCP 层)是否有真正的好处。就像一个 tinyurl 网站(用户发布查询,服务器响应并忘记)。

我也在想一个棘手但无稽之谈的想法。如果我使用 RESTful 处理来自客户端的请求并关闭服务器端的连接并执行socket.emit()

提前致谢。

【问题讨论】:

    标签: node.js xmlhttprequest socket.io express


    【解决方案1】:

    您的主要问题是 WebSocket 不像 HTTP 那样面向请求/响应。您提到 REST 和 HTTP 可以互换,请记住,REST 是一种设计和建模 HTTP 路由的方法。

    您的问题, 1. 当您不需要请求/响应格式时,Socket.io 将是一个很好的场景。例如,如果您正在构建一个多人游戏,在该游戏中,谁可以单击更多按钮就获胜,您将向服务器发送每个用户的每次点击,而不需要服务器返回它注册每次点击的响应。只要 WebSocket 连接打开,您就可以假定消息正在发送到服务器。另一个用例是当您需要服务器偶尔联系客户端时。分析页面将是 WebSockets 的一个很好的用例,因为没有统一的模式来说明数据何时需要在客户端,它可能随时发生。

    1. WebSocket 连接是一个带有特殊标头的 HTTP GET 请求,请求服务器将upgrade 发送到 WebSocket 连接。区分 WebSocket 连接上的不同事件和消息取决于您的应用程序逻辑,并且可能与 REST 样式的 URI 和方法不匹配(否则您在某种意义上是复制 HTTP 请求/回复)。

    2. 没有。

    不知道你最后的意思。

    【讨论】:

    • 好吧,你提出了一些非常好的观点。第三位,你还是回答了。我现在有点了解大局了。谢谢。一个困惑认为The WebSocket connection is an HTTP GET request with a special header requesting the server to upgrade it to a WebSocket connection websocket 是 HTTP GET 吗?我不这么认为。
    【解决方案2】:

    我只会解释更多关于您何时想要使用 Socket.IO 并将深入的解释留给 Tj 那里。

    通常,当性能和/或延迟是主要问题并且您的网站涉及用户经常轮询数据时,您会选择 Socket.IO。 AJAX 或长轮询更容易实现,但是在高负载情况下可能会出现严重的性能问题。高负载,我的意思是像 Facebook。想象一下数百万人加载他们的提要,每分钟每个用户都在向服务器请求新数据。这可能需要一些严肃的硬件和软件才能使其正常工作。使用 Socket.IO,每个用户可以改为连接并无限期地等待来自服务器的新数据到达,从而大大减少整体服务器流量。

    另外,如果您有一个实时应用程序,Socket.IO 将允许更好的用户体验,同时保持合理的服务器负载。一个常见的例子是聊天室。您真的不希望不断地轮询服务器以获取新消息。服务器在收到新消息时广播它们会好得多。虽然您可以使用长轮询来做到这一点,但它在服务器资源方面可能非常昂贵。

    【讨论】:

    • 我必须同意你的观点。但我对 CLIENT to SERVER 谈话更感兴趣。
    • 注意,当直接的 websocket 升级不可用时,socket.io 将回退到长轮询、滚动加载和其他系统,这在野外经常发生。 Socket.io 提供了用于异步和推送通信的工具,使用最便捷的渠道简化了开发。
    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2016-11-11
    • 2015-06-10
    相关资源
    最近更新 更多