stram 简介

text/event-stream 是一种数据格式,通常用于服务器向客户端发送实时更新的数据。这种格式常用于实现 Server-Sent Events (SSE)。 Server-Sent Events 允许服务器端主动向客户端推送数据,而不需要客户端轮询请求。它使用 HTTP 协议,并且保持连接始终打开,以便服务器可以随时发送更新的数据给客户端。

django 使用

在 Django 中,你可以使用 StreamingHttpResponse 类来发送 text/event-stream 格式的数据。StreamingHttpResponse 是 HttpResponse 的子类,它允许你以流的形式发送响应数据,而不是一次性将所有数据加载到内存中。

views.py

# 在这里我们做了服务器主动断开,浏览器主动断开的功能的实现。

# 我们模拟主动给客户端发送50次响应,每次耗时1秒,当发送到20次服务器主动断开

def test_header(reuqest):

import datetime

import time

from django.http import StreamingHttpResponse

def event_stream():

for i in range(50):

try:

time.sleep(1)

if i == 20:

print('服务端主动断开')

return # or break

yield_data = 'data: The 中文 time is: %s\n\n' % datetime.datetime.now()

print('我在发送数据: {}'.format(yield_data))

yield yield_data

except GeneratorExit: # 用户主动断开走此方法

print('客户端断开了')

return # or break

return StreamingHttpResponse(event_stream(), content_type='text/event-stre

# 模拟首页

def xxx(request):

return render(request, '2023_test_websocket.html')

url.py

from django.urls import re_path

from test_stream import views

urlpatterns = [

re_path(r'^test_headers/$', views.test_header),

re_path(r'^xxxxx/$', views.xxx)]

settings.py

TEMPLATES = [

{

'BACKEND': 'django.template.backends.django.DjangoTemplates',

'DIRS': [os.path.join(BASE_DIR,'templates')],

'APP_DIRS': True,

'OPTIONS': {

'context_processors': [

'django.template.context_processors.debug',

'django.template.context_processors.request',

'django.contrib.auth.context_processors.auth',

'django.contrib.messages.context_processors.messages',

],

},

},

]

html

templates/2023_test_websocket.html 注意这个templates路径要在settings->TEMPLATES->DIRS找得到

Title

效果展示

event-stream 和 WebSocket 关系

event-stream 和 WebSocket 都是用于实现实时通信的技术,但是它们有一些关键的区别:

连接方式:event-stream 使用的是 HTTP 协议,并且保持连接始终打开,以便服务器可以随时发送更新的数据给客户端。而 WebSocket 是一种独立的协议,它通过一个特殊的握手过程建立一个全双工的、持久的连接。数据格式:event-stream 使用简单的文本数据格式,每一行包含一个事件类型和数据。而 WebSocket 可以传输任何类型的数据,包括二进制数据,并且支持更多的控制帧和消息类型。双向通信:event-stream 只允许服务器向客户端发送数据,而不能接收来自客户端的数据。而 WebSocket 支持双向通信,即服务器和客户端都可以发送数据给对方。实现复杂性:event-stream 的实现相对简单,只需要在服务器端生成事件数据并在客户端订阅这些事件即可。而 WebSocket 的实现要复杂一些,需要处理握手过程、错误处理、心跳检测等。跨域支持:event-stream 可以使用标准的 CORS 机制来支持跨域请求。而 WebSocket 也有自己的跨域机制,但需要在服务器端进行配置。浏览器兼容性:event-stream 在所有现代浏览器中都得到了很好的支持。而 WebSocket 在较旧的浏览器中可能不被支持,需要使用 polyfill 或者回退到其他技术(如轮询)。

综上所述,event-stream 和 WebSocket 各有优缺点,适用于不同的应用场景。如果你只需要单向通信,并且不需要处理复杂的实时数据,那么 event-stream 可能是一个更好的选择。如果你需要双向通信或者处理大量实时数据,那么 WebSocket 可能更适合你。

---------------------------END---------------------------

题外话

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

CSDN大礼包:全网最全《Python学习资料》免费赠送!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

CSDN大礼包:全网最全《Python学习资料》免费赠送!(安全链接,放心点击)

若有侵权,请联系删除

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。