实时功能怎么做提示词(WebSocket、SSE、轮询怎么选,断线重连、心跳、多实例消息广播)
要做消息通知、订单状态实时更新、在线聊天、AI 回答流式输出、大屏数据刷新这类实时功能时用:AI 根据场景在轮询、SSE、WebSocket 之间做选择,并设计连接鉴权、心跳、断线重连与消息补偿、多实例部署下的消息分发和容量评估。
通用大模型 对话模型通用
你是一名做过大规模实时系统的后端架构师。请为下面的实时功能设计技术方案。 - 功能描述:[功能描述](例:订单状态变化后,用户页面实时更新) - 通信方向:[通信方向](例:只需服务端推送,或需要双向通信) - 规模:[规模](例:同时在线 2 万人,每秒推送 500 条) - 对实时性和可靠性的要求:[实时性要求](例:秒级,消息不能丢) - 技术栈与部署:[技术栈与部署](例:Node.js 多实例 + Nginx + Redis) 请输出: 1. 方案选择:对比短轮询、长轮询、SSE、WebSocket 在这个场景下的优缺点(实现复杂度、服务器资源、穿透代理与防火墙、浏览器支持、是否需要双向),给出推荐。只需服务端推送时,说明 SSE 是否足够。 2. 连接管理: - 建立连接时的鉴权方式(以及令牌过期后的处理),避免把令牌放在可能被记录的地址中; - 心跳:间隔多长、由谁发起,以及代理和负载均衡的空闲超时设置; - 断线重连:指数退避加随机抖动,避免服务重启后所有客户端同时重连。 3. 消息可靠性:断线期间的消息如何补发(消息序号、客户端记录最后收到的序号、重连后拉取缺失消息);需要时的消息确认机制。 4. 多实例部署:用户连接分布在不同实例上时,如何把消息投递到正确的实例(例如通过发布订阅进行广播或按用户路由);负载均衡是否需要会话保持。 5. 容量评估:单实例能承载的连接数取决于哪些因素(内存、文件描述符、事件循环),需要调整哪些系统参数,如何压测。 6. 降级:实时通道不可用时退回轮询。 7. 给出服务端和客户端的核心代码(含重连与心跳)。
高亮处换成你自己的内容:[功能描述]、[通信方向]、[规模]、[实时性要求]、[技术栈与部署]
ChatGPT Plus 充值
已被复制 0 次
使用说明
怎么填变量:[通信方向] 是选型的关键:只需要服务端推送(通知、状态更新、AI 流式输出)时,SSE 实现更简单,基于普通 HTTP,更容易通过各种代理;需要客户端频繁发送消息(聊天、协同编辑)时才需要 WebSocket。[规模] 用来评估单机连接数和是否需要专门的推送服务。
常见坑:
- 部署多实例后,用户 A 连在实例 1、消息却在实例 2 产生,消息就送不到。需要发布订阅或路由机制把消息分发到正确的实例。
- 代理或负载均衡默认的空闲超时较短,没有心跳的连接会被悄悄断开,客户端却以为还连着。
- 服务重启后所有客户端在同一秒重连,形成连接风暴。重连要加随机延迟。
追问技巧:追问「设计一个压测方案,验证单实例能否承载 5000 个长连接」,或「用户同时打开多个标签页时,如何避免重复连接和重复提醒」。
示例输出
示例,仅供参考(订单状态推送,节选)
推荐:SSE。只需服务端推送,基于普通 HTTP,浏览器原生支持自动重连,并且可以通过最后事件编号实现断线补发。
多实例分发:订单服务状态变化 → 发布到 Redis 频道 → 每个推送实例订阅该频道 → 只推送给本实例上该用户的连接。
js
// 客户端:浏览器断线后会自动重连,并在请求头中带上最后收到的事件编号
const es = new EventSource('/api/stream/orders', { withCredentials: true })
es.addEventListener('order-status', (e) => {
const data = JSON.parse(e.data)
updateOrderRow(data.orderId, data.status)
})
es.onerror = () => showBanner('连接中断,正在重连…')
js
// 服务端(Node.js):定期发送注释行作为心跳,防止代理断开空闲连接
res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', Connection: 'keep-alive' })
const timer = setInterval(() => res.write(': ping\n\n'), 25000)
req.on('close', () => clearInterval(timer))同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。


0 条评论
还没有评论,来抢沙发~