使用 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
使用 node js 和 angular js 和 mysql 数据库
将 JSON 从 angular.js 发送到 node.js