SSE项目`nexus-sse`持续优化,不一样的视觉效果

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

这两天有空,就持续优化stream-nexus / nexus-sse项目,并增加了websocket的集成。这一期聊聊都改了什么?

02 客户端ID参数

2.1 旧的设计

老的建连方式长这样:

bash 复制代码
GET /sse/subscribe?clientId=6f1d2a3c-...&modules=lot,order

clientId 由浏览器 crypto.randomUUID() 生成,写进 URL,整条链路都靠它:

  • 心跳应答:POST /sse/pong?clientId=xxx`,服务端靠它定位该给哪条连接续命
  • 定向推送:{"clientIds":["xxx"]},推送给指定连接
  • 运维台账:连接列表展示、DELETE /sse/admin/connections/{clientId} 踢下线

2.2 可能出现的问题

最大的问题就是客户端的伪造。客户端自带 ID,等于「客户端可以声明自己是谁」。如果一个客户端使用了其他人的客户端,那么明明是两个客户端,统计数据只会显示一条。

既然刷新页面就会生成新的客户端,为什么不交给服务端维护呢,参数减少使用起来门槛就会降低。

2.3 新的设计

服务端分配,建连回执下发。

text 复制代码
客户端                                     服务端
  │  GET /sse/subscribe?modules=lot,order    │
  │ ──────────────────────────────────────►  │
  │                                          │ ① newClientId() → UUID
  │                                          │ ② 登记连接(撞号概率可忽略)
  │  event: MESSAGE                          │
  │  {bizModule:"sse", action:"connected",   │
  │   data:{clientId:"...", modules:[...]}}  │
  │ ◄──────────────────────────────────────  │
  │  ③ 保存 clientId                         │
  │                                          │
  │  event: PING                             │
  │ ◄──────────────────────────────────────  │
  │  POST /sse/pong?clientId=xxx             │ ④ 靠 ID 定位连接续命
  │ ──────────────────────────────────────►  │

03 连接台账优化

连接台账增加了项目运行的时间以及客户端连接的IP

04 界面的优化

之前的管理界面过于单调,增加动态效果以及科技感。

旧的界面:

新的界面:

05 WebSocket集成

nexus-sse项目没有去解决同源浏览器6个限制,nexus-websocket可以弥补。

nexus-websocket打算通过两个方式实现推送:

  • rest接口:类似sse,使用http请求推送
  • tcp协议:通过tcp协议的客户端实现推送

目前项目还是半成品,后续会进一步完善。

06 小结

无论SSE还是Websocket其实都属于模板代码,一次搭建之后,后续直接使用,时间长了可能都记得里面都有什么东西。此项目整理了自己之前业务中碰到的问题,并在项目中得到了解决。

相关推荐
斑鸠喳喳2 小时前
读写锁模式 Read-Write Lock
java·后端
Thneonl2 小时前
etcd 磁盘写满的那 6 分钟:控制面是怎么一步步瘫的
后端·架构
Tim0072 小时前
deepseek harness 导出公司报表实战
后端
明月_清风2 小时前
一个完整的数据平台是怎么工作的?从数据源到数据分析
大数据·后端·数据分析
Moment2 小时前
如果你在做 RAG,可能会需要 pdf-inspector
前端·后端·面试
信誓旦旦的程序猿2 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
Wx-bishekaifayuan3 小时前
django医院营收信息预测系统49414-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
Wx-bishekaifayuan3 小时前
springboot会议室预约管理系统42030-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
AINative软件工程3 小时前
LLM 输出 Guardrail 工程实践:5 层防护栏让 AI 生成的内容不会炸掉生产
后端·llm·ai编程