3

背景:我正在使用 NodeJS + Express 构建一个 Web 应用程序。客户端和服务器之间的大部分通信都是 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().

提前致谢。

4

2 回答 2

4

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

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

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

  2. 不。

不知道你在最后一点是什么意思。

于 2013-02-05T01:11:36.117 回答
1

我将更多地解释您何时想要使用 Socket.IO,并将深入的解释留给 Tj。

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

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

于 2013-02-05T03:21:58.370 回答