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

Posted

技术标签:

【中文标题】使用 Angular.js 和 Node.js 构建实时应用程序的更好方法是啥?【英文标题】:Which is the better way to build real-time applications using Angular.js and Node.js?使用 Angular.js 和 Node.js 构建实时应用程序的更好方法是什么? 【发布时间】:2012-12-14 21:09:54 【问题描述】:

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

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


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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

我们一直在使用 Pubnub,它的运行速度非常快,虽然 Pusher 的技术更好,但目前并非所有浏览器都支持。

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

【讨论】:

【参考方案4】:

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

因为您似乎与后端进行了很多交互。如果是这样而不是每隔一段时间查询 api,只需使用 Socket.io。

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

【讨论】:

【参考方案5】:

Socket.io 有以下优点:

减少不必要的流量和渲染 低延迟 (可以说)更简洁的代码

REST 具有以下优点:

在所有浏览器和客户端上均受支持 较少打开的连接 在集群、代理和其他复杂的网络拓扑中工作得更好

这些观点中的每一个都值得单独进行长时间的讨论,其中一些在很大程度上取决于应用程序的特性。但是,如果您按优先级标记它们,您会看到什么可能最适合您。

【讨论】:

以上是关于使用 Angular.js 和 Node.js 构建实时应用程序的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Angular.js 的 Node.js CORS 会话 cookie

Angular JS 和 node.js

使用 node js 和 angular js 和 mysql 数据库

将 JSON 从 angular.js 发送到 node.js

Node.js Angular.js Vue.js视频教程合集

当我尝试从 Angular.js 发送到 Node.js 时,单独的数据丢失了