Javascript AngularJS和WebSockets超越
我刚刚读了这篇文章,我确实理解其中的区别。但我的脑海里仍然有一个问题。我可以/应该在同一个应用程序/网站中使用它吗?比如说,我希望AngularJs获取内容并更新我的页面,连接到RESTAPI和所有顶级内容。但除此之外,我还需要一个实时聊天,或者在收到更新或消息时触发其他客户端上的事件 角度能支持吗?或者我需要使用Socket.io之类的东西来触发这些事件?两者都用有意义吗? 如果有人能帮我,或者给我指出一些关于这方面的好文章,如果两者结合使用是有目的的话 希望我足够清楚。谢谢你的帮助 如链接文章中的中所述,Angular当前没有WebSocket的内置支持。因此,您需要直接使用Websockets API,或者使用额外的库,如Socket.io 但是,要回答您的问题,即是否应该在单个Angular应用程序中同时使用REST api和WebSocket,没有理由不能使用$http或其他数据层库(如BreezeJS)同时使用标准XmlHttpRequest请求与REST api进行交互,对于应用程序各个部分中包含的某些功能,也可以使用Wesockets进行其他部分(例如实时聊天) Angular旨在协助处理此类场景。一个典型的解决方案是创建一个或多个控制器来处理应用程序功能并更新页面,然后创建单独的服务或工厂,封装每个数据端点(即REST api和实时聊天服务器)的数据管理,然后将其注入控制器 关于使用angular services/Factorys管理数据连接,有大量可用信息。如果您正在寻找一个资源来帮助指导您如何构建一个角度应用程序以及数据服务在何处适合,我建议您查看John Papa's,其中包括一个关于Javascript AngularJS和WebSockets超越,javascript,angularjs,websocket,socket.io,Javascript,Angularjs,Websocket,Socket.io,我刚刚读了这篇文章,我确实理解其中的区别。但我的脑海里仍然有一个问题。我可以/应该在同一个应用程序/网站中使用它吗?比如说,我希望AngularJs获取内容并更新我的页面,连接到RESTAPI和所有顶级内容。但除此之外,我还需要一个实时聊天,或者在收到更新或消息时触发其他客户端上的事件 角度能支持吗?或者我需要使用Socket.io之类的东西来触发这些事件?两者都用有意义吗? 如果有人能帮我,或者给我指出一些关于这方面的好文章,如果两者结合使用是有目的的话 希望我足够清楚。谢谢你的帮助 如链接文
有关工厂和服务的更多信息,您可以查看Javascript支持WebSocket,因此不需要额外的客户端框架来使用它。请看一看这张申报表 基本上,您可以侦听消息:
$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; },
function (msg) {
addTerminal(msg);
$scope.$$phase || $scope.$apply();
});
$connection.send({
type: "TerminalInputRequest",
input: cmd,
terminalId: $scope.terminalId,
correlationId: $connection.nextCorrelationId()
});
听一次(非常适合请求/响应):
并发送信息:
$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; },
function (msg) {
addTerminal(msg);
$scope.$$phase || $scope.$apply();
});
$connection.send({
type: "TerminalInputRequest",
input: cmd,
terminalId: $scope.terminalId,
correlationId: $connection.nextCorrelationId()
});
通常,由于WebSocket连接是双向的,所以您也可以在请求/响应模型中使用它从服务器获取数据。您可以有两种型号:
- Publisher/Subscriber:客户端声明其对某些主题感兴趣,并为具有该主题的消息设置处理程序,然后服务器在其认为合适时发布(或推送)消息
- 请求/响应:客户端发送带有requestID(或correlationId)的消息,并侦听该requestID的单个响应
在服务器端,您可能需要使用Socket.io或任何服务器端框架,以便拥有支持WebSocket的后端。很好的示例,但请注意,$connection不是angular的一部分,以$开头的服务应保留给angular api。