使用Angular.js和Node.js构build实时应用程序的更好方法是什么?

我是Angular.js和Node.js的初学者,但是我意识到有两种可能的方法来实现实时应用程序。 第一个是使用Socket.io,另一个是使用带有setInterval()函数的RESTful作为客户端解决scheme。 我使用两种替代方法构build了我的应用程序,但是我不知道为什么使用一个而不是另一个更好。

我的控制器使用Angular.js(Socket.io替代):

function MyController($scope, socket) { socket.on('test', function(data){ $scope.data = data; console.log($scope.data); }); } 

我的控制器使用Angular.js(RESTful替代):

 function MyController($scope, $http) { setInterval(function() { $http.get('/test.json') .success(function(data, status, headers, config) { $scope.data = data; console.log($scope.data); }); }, 1000); } 

这些做事方式之间的区别是什么? 提前致谢!

如果你想要一个完全实时的Web应用程序,那么套接字是要走的路。 Socket.io或SockJS都是非常好的客户。 当不支持networking套接字时,它们有能力优雅地退化,但是,你可以select你想使用的传输方式。

您必须构build数据订阅服务,以便在所有用户之间传播更改。 Tower.js和Meteor都使用被动方法,他们在模型变化上使用事件监听器。 取决于你想要这个function有多复杂或多么强大,它们将是不同的实现。

当尝试同时跨多个用户同步客户端和服务器端数据时,它变得越来越复杂。 我build议你看看这两个框架,看看它们是如何工作的,并可能复制其中的一部分或全部function。

根据你的使用情况,我认为Socket.IO是最好的select。 然而,在Angular中使用WebSockets有一些注意事项。 我build议你看看前一段关于这个主题的博文: http : //briantford.com/blog/angular-socket-io.html

我们不得不从推送器(使用Websocket)和使用Ajax进行发布/订阅实时事件的Pubnub之间进行select。 尝试跨应用程序的不同用户进行实时通信时,您的Angular RESTful备选scheme还不够。 例如,您有一个团队使用的项目pipe理应用程序。 一个团队成员可能正在添加/更新任务,而另一个成员可能正在同时查看。 更新需要发布,当前login的所有其他用户将订阅已更改的事件,并可以通知。

我们一直在使用Pubnub,虽然Pusher的技术比较好,但是目前所有的浏览器都不支持,

我知道AJ和NodeJS的问题,但我觉得使用第三方订阅/发布API可以更容易pipe理,因为你不必pipe理nodejs服务器和更大的负载(当你的应用程序stream行)。 Pusher / Pubnub是可扩展的,你可以扩展你的应用程序,只要你想要的。

你的情况最好使用Socket.io。

因为你似乎做了很多与后端的交互。如果是这样的,而不是查询api间隔只使用Socket.io。

使用套接字将减less你在后台和客户端的工作,也将使控制你的事件的东西更容易。

Socket.io具有以下优点:

  • 减less不必要的交通和渲染
  • 较低的延迟
  • (可以说)更简洁的代码

REST具有以下优点:

  • 支持所有浏览器和客户端
  • 开放连接较less
  • 在集群,代理和其他复杂的networking拓扑中工作得更好

每一点都值得关于它自己的长时间的讨论,有些取决于应用程序的特性。 但是,如果你优先标记它们,你会看到什么可能是最适合你的。