web开发技巧-SSE

概述

严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。

也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。

SSE对比WebSocket的优点

SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。
SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。
SSE 默认支持断线重连,WebSocket 需要自己实现。
SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。
SSE 支持自定义发送的消息类型。

var code = “8b9c5440-6a7a-466b-aa0c-902ed6e4f020”

代码

server.js代码

var http = require('http');

http
  .createServer(function (req, res) {
    var fileName = '.' + req.url;

    if (fileName === './stream') {
      res.writeHead(200, {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        Connection: 'keep-alive',
        'Access-Control-Allow-Origin': '*'
      });
      res.write('retry: 10000\n');
      res.write('event: connecttime\n');
      res.write('data: ' + new Date() + '\n\n');
      res.write('data: ' + new Date() + '\n\n');

      interval = setInterval(function () {
        res.write('data: ' + new Date() + '\n\n');
      }, 1000);

      req.connection.addListener(
        'close',
        function () {
          clearInterval(interval);
        },
        false
      );
    }
  })
  .listen(8844, '127.0.0.1');

index.html代码

  <div id="example"></div>
  <script>
    var source = new EventSource('http://127.0.0.1:8844/stream');
    var div = document.getElementById('example');

    source.onopen = function (event) {
      div.innerHTML += '<p>Connection open ...</p>';
    };

    source.onerror = function (event) {
      div.innerHTML += '<p>Connection close.</p>';
    };

    source.addEventListener('connecttime', function (event) {
      div.innerHTML += ('<p>Start time: ' + event.data + '</p>');
    }, false);

    source.onmessage = function (event) {
      div.innerHTML += ('<p>Ping: ' + event.data + '</p>');
    };

  </script>

先执行node server.js在打开界面就可以看到效果了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django-sse是一个Django应用,它提供了一种实现服务器发送事件(Server-Sent Events)的方式。在Django-sse中,服务器可以向客户端推送新的消息,而客户端则可以通过EventSource API接收这些消息。以下是使用Django-sse实现服务器发送事件的基本步骤: 1. 安装Django-sse 可以使用pip命令进行安装: ``` pip install django-sse ``` 2. 创建视图函数 在Django中创建一个视图函数,该函数用于处理客户端的请求并向客户端发送事件。以下是示例代码: ```python from django_sse.views import BaseSseView class MySseView(BaseSseView): def iterator(self): # 在这里生成要发送给客户端的事件 yield 'event: my_event\n' yield 'data: {}\n\n'.format('hello world') ``` 在上面的代码中,我们继承了Django-sse提供的BaseSseView类,并实现了iterator方法。该方法用于生成要发送给客户端的事件。在这里,我们生成了一个名为“my_event”的事件,并附带了一个“hello world”的消息。 3. 添加URL 在Django中添加一个URL,将其映射到上面创建的视图函数。以下是示例代码: ```python from django.urls import path from .views import MySseView urlpatterns = [ path('my-sse-view/', MySseView.as_view(), name='my_sse_view'), ] ``` 4. 在客户端使用EventSource 在客户端使用JavaScript代码创建一个EventSource对象,指定上面添加的URL。以下是示例代码: ```javascript var source = new EventSource('/my-sse-view/'); source.addEventListener('my_event', function(event) { console.log(event.data); }); ``` 在上面的代码中,我们创建了一个名为“my_event”的事件监听器,并在控制台中打印了接收到的消息。 以上就是使用Django-sse实现服务器发送事件的基本步骤。需要注意的是,在实际应用中,我们需要根据具体需求生成不同类型的事件,并在事件监听器中处理这些事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃土豆丝嗯z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值