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

相关推荐
云和数据.ChenGuang10 分钟前
print(f“a+b=“,result) print(f“a+b={result}“)区别
java·前端·人工智能·python·深度学习
2601_9628857220 分钟前
如何用 Python 算最大回撤和回撤恢复期?
java·数据库·python
毕业设计7031 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
Q26433650231 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
黄鹂鸟科技1 小时前
进销存系统设计要点:从采购计划、库存监控到成本核算
后端·物联网·系统架构
撸串-研究生2 小时前
基于Spring Boot的智慧社区垃圾分类与回收系统的设计与实现【附源码】
spring boot·后端·分类·垃圾分类·社区管理
悠仁さん2 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
鬼手点金2 小时前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
171320330计算机毕设编程2 小时前
计算机毕业设计 基于Hadoop的新能源汽车发展前景分析 LW PPT
java·大数据·hadoop·python·算法·随机森林·线性回归