行业资讯

从Flutter到Go,这款三端源码如何撑起短视频+直播+商城+IM?

高染网络·2026-06-12·112 阅读

摘要:深度拆解Like源码的技术选型与设计细节,分享Flutter+Go+Vue三端联调的真实踩坑经验,给考虑商业源码的团队一些参考。

去年我们团队接了一个短视频+直播的SaaS项目,原本想自研,但工期和成本实在扛不住。最后买了套商业源码,就是这套Like——Flutter+Go+Vue三端。用了半年,有些心得,跟大伙儿聊聊。

技术栈选型:为啥是Flutter而不是RN?

移动端用了Flutter 3.10,Dart 3.x。其实之前我们也用过React Native,但遇到两个痛点:一是直播礼物动画的帧率不稳,二是多端统一时Web端表现差异大。Flutter的Skia引擎在视频和动画上确实更顺。我们实测过,同时打iOS和Android包,差点直接被QPS 2000的直播弹幕干挂了一台。后来把弹幕改成Redis缓冲+异步批量入库,扛住了。

最让我头疼的是WebSocket连接池的管理。后端用了gorilla/websocket,单个Hub撑万级并发没问题,但客户端频繁重连会导致Hub里的连接数爆增。我们加了心跳检测和超时清理,才稳定下来。

短视频Feed的坑:上下滑跟抖音一样?

短视频模块的上下滑全屏Feed,双击爱心动画是用ValueNotifier做的状态管理,配合自研的VideoPool控制器池。之前用官方player,切到第四个视频就开始卡,后来换成VideoPool预加载前后两个视频,体验才上去。注意,视频池的数量要控制好,我们曾设成6个,结果低端机型直接闪退,改成3个后稳了。

弹幕是Redis缓冲,2小时滚动。但别在业务高峰去清Redis,不然弹幕抖得跟雪崩一样。

直播:Agora推流+SVGA礼物,音画同步是难题

直播用声网Agora RTC,token现颁。之前对接时发现声网6.5的SDK跟Flutter的video_player有冲突,后来把播放器降级到6.4.0才解决。SVGA礼物动画,多档梯度,记得把素材压缩到2MB以内,否则加载慢。

带货直播功能,我们在商品挂载时遇到JSON序列化问题:Go的GORM存JSON字段用了string,前端Vue解析时忘了JSON.parse,导致商品详情页白屏。这种小坑,调试了两天。

IM:多设备登录和踢人,JWT怎么设计?

用户态的JWT有效期7天,管理员态24小时。多设备登录管理,我们加了个设备ID字段,每个token关联设备。踢人时直接撤销该设备的token,Redis里存黑名单。注意,频繁踢人会导致数据库写压力,所以用Redis记录踢人动作,异步写库。

私信模块的IM,本来想用WebSocket全双工,但发现离线消息不好处理。后来改为WebSocket仅做在线推送,离线消息走APNs和FCM。但注意,Go后端的gorilla/websocket在处理断线重连时,需要做幂等:重复的消息不要推送两次。

物流助手也是类似设计。

后台管理系统:RBAC授权,权限粒度怎么设?

后台是Vue3+Arco Design,RBAC四级授权:管理员、角色、菜单、API。我们踩的坑是菜单权限的递归:如果父菜单隐藏,子菜单必须全隐藏。写了个递归函数检查父节点状态,才堵住这个洞。

ECharts做数据报表,注意记得在组件销毁时dispose掉,否则内存泄漏。

到底值不值?我的建议

如果你是中小团队,没有几十万的预算和半年的开发期,这套源码确实能省很多事。但源码不是拿来就用的:

  • 换短信通道:内置短信宝,但换成阿里云时,记得改signName和templateCode,文档没说清。
  • 视频直传七牛云:官方例子是本地直传,我们改成前端分片上传,后端的回调接口注意验签。
  • 数据库Mysql 8.0 + Redis 6:记得把slow_log和bigkey监控起来,否则并发一高,CPU直接飚到80%。

总的来说,性价比不错,但二次开发至少需要1-2个全栈,熟悉Flutter和Go的团队会轻松很多。希望这篇分享能帮你少走弯路。