当前位置: 首页 > backend >正文

一个纯粹基于jQuery和Django的SSE站内信通知的例子

这两天写了一个基于SSE技术的站内信通知红点的例子。现在来总结一下。

首先,站内信红点的实现方式基本上就三种:网页上设置一个Timer然后定时轮询;开一个WebSocket长链接;基于SSE的流模式。最终想试试SSE,就写了这个例子。

其次,SSE的实现也有很多种:第一种基于SSE.js;第二种是PHP;第三种是django。我采用的是django。网上大部分的例子都是需要第三方库: django-sse或者Daphen。我就是想基于原生jQuery和Django来实现。最后找了一个好方法,特此记录一下。

Django端的views代码:

def get_unread_message_count_view(request):def event_stream():while True:# 从数据库或其他数据源获取数据messages = Messages.objects.filter(read_flag=False)unread_message_count = messages.count()# 构造SSE消息event = 'message'message = f'data: {unread_message_count}\n\n'yield f'event: {event}\n{message}'response = StreamingHttpResponse(event_stream(), content_type='text/event-stream')response['Cache-Control'] = 'no-cache'return response

urls就是标准的代码

网页端:

<div class="fa-stack fa-2x" id="message_bell" data-count="10"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-bell fa-stack-1x fa-inverse"></i>
</div>
<script type="text/javascript">$(function () {$(document).ready(function() {//data根据需求自定义参数const eventSource = new EventSource('get_unread_message_count');eventSource.addEventListener('message', function(event) {const data = event.data;$("#message_bell").attr("data-count",data);if (data == 0) {$('.fa-stack').addClass('hidden');}else {$('.fa-stack').removeClass('hidden');}// 处理收到的数据});});});</script>
http://www.xdnf.cn/news/8147.html

相关文章:

  • 飞牛fnNAS远程映射盘符
  • PARSCALE:大语言模型的第三种扩展范式
  • CAD如何导出PDF?PDF如何转CAD?详细教程来了
  • Phantom 根据图片和文字描述,自动生成一段视频,并且动作、场景等内容会按照文字描述来呈现
  • 对Web界面进行简单自动化测试Selenium
  • vscode git push 记录
  • 现代生活健康养生新策略
  • Aqua Mail Pro 安卓邮件管理助手可备份和恢复的邮件客户端 v1.55.1专业版
  • (第94天)OGG 微服务搭建 Oracle 19C CDB 架构同步
  • 网络安全-等级保护(等保) 3-1-1 GB/T 28448-2019 附录A (资料性附录)测评力度附录C(规范性附录)测评单元编号说明
  • spring boot 实现resp视频推流
  • 觉醒三境:在敦煌的风沙中寻找生命的纹路
  • 基于deepseek 以及豆包工具+nodejs 搭建A I自动化客服系统
  • 角度回归——八参数检测四边形Gliding Vertex
  • 树 Part 9
  • 【IC_Design】跨时钟域的寄存器更新后锁存
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • (37)服务器增加ipv6配置方法
  • MySQL 查询用户权限的方法
  • redis-7.4.2 通过 systemd管理,rpmbuild spec文件参考
  • C++ JSON解析技术详解
  • QGIS DB Manager 导入 Shp 到 PostGIS 空间数据库
  • Mysql 刷题Day09
  • 常用快捷键大全
  • 在Pycharm中如何安装Flask
  • C++ 02.好用的命令行解析库cmdline和CLI11
  • 【Java高阶面经:数据库篇】19、分库分表查询困境:无分库分表键时的高效应对
  • 【RAG】ragflow源码亮点:文档embedding向量化加权融合
  • 【未来展望】云、AI与元宇宙的融合架构
  • dlib库的人脸检测案例实现