哪个是使用Angular.js和Node.js构建实时应用程序的更好方法?

时间:2012-12-30 08:03:15

标签: node.js sockets rest socket.io angularjs

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

我的控制器使用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);

}

这些做事方式之间会有什么不同? 提前谢谢!

5 个答案:

答案 0 :(得分:8)

如果您想要一个完全实时的Web应用程序,那么套接字是可行的方法。 Socket.io或SockJS都是非常好的客户。当不支持Web套接字时,它们可以优雅地降级,但是,您可以选择您想要使用的传输方法。

您必须构建数据订阅服务,以便在所有用户之间传播更改。 Tower.js和Meteor都使用被动方法,他们在模型更改时使用事件监听器。根据您希望此功能的复杂程度或强大程度,它们将是不同的可用实现。

尝试在一次连接的多个用户之间同步客户端和服务器端数据时,它确实变得越来越复杂。我建议你看看这两个框架,看看它们是如何工作的,并且可能复制它的一部分,或者它的所有功能。

答案 1 :(得分:6)

根据您的使用案例,我认为Socket.IO是可行的方法。但是,使用带有Angular的WebSockets有一些注意事项。我建议你看看我刚才写的关于这个主题的博客文章:http://briantford.com/blog/angular-socket-io.html

答案 2 :(得分:3)

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

我们一直在使用Pubnub并且它的工作速度非常快,尽管Pusher的技术更好但目前并不是所有浏览器都支持。

我知道问题出在AJ和NodeJS上,但我觉得使用第三方订阅/发布API可以更容易管理,因为您不必管理nodejs服务器和更大的负载(当您的应用程序流行时)。 Pusher / Pubnub是可扩展的,您可以根据需要扩展您的应用程序。

答案 3 :(得分:2)

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

因为您似乎与后端进行了大量的交互。如果它是这样的,而不是间隔查询api,只需使用Socket.io。

使用套接字将减少后端和客户端的工作,并且还可以更轻松地控制基于事件的内容。

答案 4 :(得分:2)

Socket.io具有以下优点:

  • 减少不必要的交通和渲染
  • 降低延迟
  • (可以说)清洁代码

REST具有以下优势:

  • 所有浏览器和客户端均支持
  • 不太开放的连接
  • 在群集,代理和其他复杂的网络拓扑中更好地工作

这些要点中的每一点都值得长期讨论,有些依赖于应用程序的特性。但如果你按优先级标记它们,你会看到最适合你的东西。