在直播小程序系统开发中,最常见的问题不是“功能不会做”,而是“做出来但连不起来”。前端、小程序与后端各自独立开发,最终却无法形成稳定的交易闭环。
直播带货的本质是一条连续链路:
用户进入 → 观看直播 → 互动 → 点击商品 → 下单 → 支付
三端协同的目标,就是保证这条链路在不同系统之间无缝流转、状态一致、性能稳定。
一、整体协同架构设计
一个完整的直播小程序系统,通常由三部分组成:
前端(H5或主播端)
小程序端(用户侧)
后端服务(业务核心)
整体结构如下:
主播端(推流/控制)
↓
直播服务(流媒体/状态)
↓
小程序(用户观看/下单)
↓
后端服务(用户/订单/商品)
其中的核心原则是:
所有关键状态必须以“后端”为中心进行统一管理。
二、小程序端:用户行为承载层
小程序负责承接用户行为,是整个链路的“入口”和“转化核心”。
1. 直播播放能力
<live-player
src="{
{liveUrl}}"
autoplay
bindstatechange="onStateChange"
/>
Page({
data: {
liveUrl: ''
},
onLoad() {
this.setData({
liveUrl: 'rtmp://live.xxx.com/stream/1001'
});
}
});
小程序端只负责播放,不处理复杂业务逻辑。
2. 商品点击与下单入口
goBuy(e) {
const productId = e.currentTarget.dataset.id;
wx.navigateTo({
url: `/pages/order/confirm?id=${
productId}`
});
}
这里的关键点是:
- 小程序负责“触发行为”
- 不负责“业务判断”
三、前端(H5/主播端):控制与扩展层
前端主要承担两个角色:
- 主播控制端
- H5扩展页面(如嵌套场景)
1. 主播端控制直播状态
// 开播
function startLive(roomId) {
fetch('/api/live/start', {
method: 'POST',
body: JSON.stringify({
roomId })
});
}
2. 切换直播商品
function switchProduct(productId) {
fetch('/api/live/switchProduct', {
method: 'POST',
body: JSON.stringify({
productId })
});
}
主播的每一个操作,本质都是在“修改后端状态”。
四、后端:统一状态与业务中枢
后端是整个系统的核心,负责:
- 用户状态
- 直播状态
- 商品数据
- 订单处理
1. 直播状态管理
@PostMapping("/live/switchProduct")
public Result switchProduct(@RequestBody Map<String, Long> param){
Long productId = param.get("productId");
redisTemplate.opsForValue().set("live:current:product", productId);
return Result.ok();
}
2. 小程序获取当前直播商品
@GetMapping("/live/currentProduct")
public Product getCurrentProduct(){
Long productId = (Long) redisTemplate.opsForValue()
.get("live:current:product");
return productService.getById(productId);
}
3. 订单创建(核心链路)
@PostMapping("/order/create")
public Result createOrder(@RequestBody OrderDTO dto){
Product product = productService.getById(dto.getProductId());
if(product.getStock() <= 0){
return Result.fail("库存不足");
}
// 扣减库存
productService.reduceStock(product.getId());
Order order = orderService.create(dto);
return Result.ok(order);
}
五、三端协同的关键机制
1. 状态统一(核心原则)
所有关键数据必须由后端统一管理,例如:
- 当前直播商品
- 库存数量
- 订单状态
前端与小程序只负责“读取”和“触发”。
2. 实时同步机制
常见方式是使用 WebSocket:
// 小程序监听直播数据
const socket = wx.connectSocket({
url: 'wss://api.xxx.com/live'
});
socket.onMessage(res => {
const data = JSON.parse(res.data);
if(data.type === 'PRODUCT_CHANGE'){
this.setData({
currentProduct: data.product
});
}
});
后端推送:
public void pushProductChange(Product product){
websocketServer.broadcast(JSON.toJSONString(
new Message("PRODUCT_CHANGE", product)
));
}
3. 高并发处理(防崩关键)
直播场景下,订单会瞬间爆发。
必须引入缓存和队列:
public String createOrder(Long userId, Long productId){
Long stock = redisTemplate.opsForValue()
.decrement("stock:" + productId);
if(stock < 0){
return "售罄";
}
mqProducer.send("order_queue", new OrderMsg(userId, productId));
return "下单成功";
}
六、协同流程总结(完整链路)
一条完整链路如下:
- 主播端切换商品 → 请求后端
- 后端更新当前商品状态(Redis)
- WebSocket推送给小程序
- 小程序更新商品展示
- 用户点击商品 → 发起下单
- 后端处理订单 → 返回结果
- 小程序发起支付
这条链路中:
- 前端负责控制
- 小程序负责用户交互
- 后端负责一切业务逻辑
七、常见协同问题
1. 前端直接控制业务逻辑
导致数据不一致,难以维护
2. 小程序与后端状态不同步
出现“显示有货但下单失败”
3. 后端未做并发控制
高峰期直接崩溃
4. 通信机制混乱
接口、WebSocket、轮询混用
八、结论
直播小程序系统开发的难点,不在单个技术点,而在三端协同。
真正稳定的系统,必须满足:
- 状态统一在后端
- 数据实时同步
- 链路清晰可控