AngularJS和WebSockets超越

我刚刚阅读了这篇文章,并且我明白了它的区别。 但仍然在我的脑海中,我有这个问题。 可以/我应该在同一个应用程序/网站中使用它吗? 假设我希望AngularJs获取内容并更新我的页面,连接到REST API以及所有顶级的东西。 但最重要的是,我还希望实时聊天,或者在收到更新或消息时触发其他客户端上的事件。

角支持吗? 或者我需要使用类似Socket.io的东西来触发这些事件? 使用两者有意义吗? 如果有人能够帮助我,或者指出我有一些很好的解读,如果有两个目的一起使用。

希望我很清楚。 感谢您的任何帮助。


Javascript支持WebSocket,所以你不需要额外的客户端框架来使用它。 请看看这个基于WebSocket的AngularJS应用程序中声明的$ connection服务。

基本上你可以听信息:

   $connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; }, 
        function (msg) {
            addTerminal(msg);
            $scope.$$phase || $scope.$apply();
   });

听一次(很适合请求/响应):

    $connection.listenOnce(function (data) {
        return data.correlationId && data.correlationId == crrId;
    }).then(function (data) {
        $rootScope.addAlert({ msg: "Console " + data.terminalType + " created", type: "success" });
    });

并发送消息:

    $connection.send({
        type: "TerminalInputRequest",
        input: cmd,
        terminalId: $scope.terminalId,
        correlationId: $connection.nextCorrelationId()
    });

通常,由于WebSocket连接是双向的并且具有良好的支持,因此您还可以使用它在请求/响应模型中从服务器获取数据。 你可以有两个模型:

  • 发布者/订阅者 :客户端声明对某些主题感兴趣并为该主题的消息设置处理程序,然后服务器在适当时发布(或推送)消息。

  • 请求/响应 :客户端使用requestID(或correlationId)发送消息,并侦听该请求标识的单个响应。

  • 不过,如果你愿意的话,你可以同时使用它们,并使用REST获取数据,使用WebSocket获取更新。

    在服务器端,您可能需要使用Socket.io或任何服务器端框架才能拥有带WebSocket支持的后端。


    正如您在链接帖子中的回答中所指出的,Angular目前没有内置的Websockets支持。 所以,你需要直接使用Websockets API,或者使用像Socket.io这样的附加库。

    但是,要回答您是否应该在单个Angular应用程序中同时使用REST api和Websockets的问题,没有理由不能使用$ http或其他数据层同时使用标准XmlHttpRequest请求与REST API进行交互库(如BreezeJS),用于应用程序各个部分中包含的某些功能,还可以将Wesockets用于其他部分(例如实时聊天)。

    Angular旨在协助处理这种类型的场景。 一个典型的解决方案是创建一个或多个控制器来处理应用程序功能并更新页面,然后创建单独的服务或工厂来封装每个数据端点的数据管理(即REST API和实时聊天服务器),然后将其注入控制器。

    有很多关于使用角度服务/工厂来管理数据连接的信息。 如果您正在寻找一种资源来帮助您指导如何构建Angular应用程序以及数据服务适合的位置,我建议您查看John Papa的AngularJS Styleguide,其中包含关于数据服务的一节。

    有关工厂和服务的更多信息,您可以查看AngularJS:何时使用服务而不是工厂

    链接地址: http://www.djcxy.com/p/77537.html

    上一篇: AngularJS and WebSockets beyond

    下一篇: Should I use factory or service for fetching data in AngularJS?