Socket.io与AJAX用例

时间:2013-02-03 00:55:53

标签: node.js xmlhttprequest socket.io express

背景:我正在使用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()

,该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:4)

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

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

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

  2. 没有

  3. 不确定你在最后一位是什么意思。

答案 1 :(得分:1)

我只是解释一下你何时想要使用Socket.IO并在那里给Tj留下深入的解释。

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

此外,如果您有实时应用程序,Socket.IO将允许更好的用户体验,同时保持合理的服务器负载。一个常见的例子是聊天室。你真的不想不断地在服务器上轮询新消息。服务器在收到新消息时广播会好得多。虽然您可以使用长轮询进行,但就服务器资源而言,它可能相当昂贵。