使用 AngularJS 和 Server-sent Events 构建实时 Web 应用

前言

在那个数据爆炸的时代,我们需要能够随时随地地访问实时数据的 Web 应用。传统的 Web 应用使用轮询实现数据实时更新,但这种方式带来的效率极低,对服务器压力也很大。本文将介绍另外一种实现实时数据的方式:使用 AngularJS 和 Server-sent Events 构建实时 Web 应用。

AngularJS 是什么

AngularJS 是一个由 Google 开发的 JavaScript 框架,它可以帮助开发者构建可扩展的 Web 应用。AngularJS 的优势在于 MVC 设计模式的实现,这个模式让代码可以分层,代码风格清晰,还有很多工具可以快速地构建可复用的代码。AngularJS 还提供了一些高级功能,如依赖注入、模板语言、数据绑定等等。

Server-sent Events 是什么

Server-sent Events(SSE)是一种基于 HTTP 的服务器推送技术。通过 SSE,服务器可以向客户端发送事件流,使得客户端能够实时地获得新的数据。SSE 使用了 HTTP 协议的长连接,这样浏览器就可以始终保持连接,并且服务器可以通过类似于流的方式向客户端发送消息。

构建实时 Web 应用的示例代码

<!DOCTYPE html>
<html>
<head>
    <title>Real-time Web Application</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
    <script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        var source = new EventSource('/events');
        source.addEventListener('message', function(e) {
            $scope.$apply(function() {
                $scope.message = e.data;
            });
        }, false);
        source.addEventListener('error', function(e) {
            if (e.eventPhase === EventSource.CLOSED) {
                $scope.$apply(function() {
                    $scope.message = 'Lost connection to server';
                });
            } else {
                $scope.$apply(function() {
                    $scope.message = 'Error connecting to server';
                });
            }
        }, false);
    });
    </script>
</head>
<body ng-app="myApp">
    <div ng-controller="myCtrl">
        <h1>{{message}}</h1>
    </div>
</body>
</html>

这个示例应用使用 AngularJS 和 SSE 搭建一个实时的 Web 应用。当服务器有新的数据时,它会通过 SSE 传送到客户端,然后 AngularJS 会立即更新页面上的数据。

如何创建 SSE 服务

现在,我们来看一下如何使用 Node.js 和 Express 来创建一个 SSE 服务。下面是一个简单的代码示例:

var express = require('express');
var app = express();

app.get('/events', function(req, res) {
    res.set({
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive'
    });

    var counter = 0;
    setInterval(function() {
        res.write('event: message\n');
        res.write('data: ' + new Date() + '\n\n');
    }, 1000);

    req.connection.addListener('close', function() {
        console.log('client disconnected');
    });
});

app.listen(3000, function() {
    console.log('server started on port 3000');
});

这个代码示例使用 Express 框架来创建一个服务器,提供了一个 /events 路径,当客户端发起 GET 请求时,会返回 SSE 服务。

服务器会每秒钟向客户端发送一次消息,消息内容是当前的时间戳。Content-Type 头部必须设置为 text/event-stream,这样浏览器就能够理解这是一个 SSE 服务。Connection 头部必须设置为 keep-alive,这样服务器和客户端的连接就可以始终保持。Cache-Control 头部必须设置为 no-cache,这样确保数据不会被缓存。

总结

现在,您已经知道如何使用 AngularJS 和 SSE 构建实时 Web 应用了。SSE 是一种轻量级而又有效的方式,它可以帮助您构建更加快速、实时、响应的 Web 应用。如果您对这种技术的支持有任何问题,欢迎随时向我们提出意见和建议!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a9e1cbadd4f0e0ff3547be


纠错反馈