小编典典

AngularJS和WebSockets超越

angularjs

我刚刚阅读了这篇文章,并且我知道有什么区别。但是我仍然有一个问题。我可以/应该在同一应用程序/网站中使用它吗?假设我希望AngularJs提取内容并更新我的页面,并连接到REST
api和所有这些重要内容。但除此之外,我还希望进行实时聊天,或者在收到更新或消息时触发其他客户端上的事件。

Angular支持吗?还是我需要使用Socket.io之类的东西来触发这些事件?两者都使用有意义吗?如果有人可以同时使用这两个对象,则可以帮助我或为我提供一些不错的阅读资料。

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


阅读 343

收藏
2020-07-04

共1个答案

小编典典

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)的消息,并监听该requestId的单个响应。

不过,您可以同时拥有两者,并使用REST来获取数据,并使用WebSocket来获取更新。

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

2020-07-04