当前位置: 首页 > news >正文

3.1 vss-performance 多协议监听与SIP发送流水线异步化

VSS 多协议监听与 SIP 发送流水线异步化

试用安装包下载 | SMS | 在线演示

项目地址:https://github.com/openskeye/go-vss

背景

VSS 同时承担GB28181 信令面(SIP)与媒体面回调(HTTP通知、WebSocket、SSE)。若信令处理与业务发送在同一线程或同步阻塞,单路设备抖动会拖慢整进程吞吐。本仓库采用多监听 + 有界队列 + 分发协程将「收包」与「发信令」解耦。

项目中的做法

1. GBS 双栈监听(TCP / UDP 并行)

main.go中用sync.WaitGroup启两个 goroutine,分别对 GBS 注册同一套 Handler,绑定TCPUDP。国标设备侧常混用两种传输,并行监听避免在单协议上排队,同时充分利用多核。

SIP 监听

SipGbsServer TCP

SipGbsServer UDP

终端/平台

RegisterHandlers

2. 发送侧:单协程select多路 channel,任务再go出去

SendLogicsend_sip_proc.go)主循环从多个SipSend*channel 收消息;每类消息再起独立 goroutine执行实际catalog/invite/bye等。这样:

  • 分发协程不会被慢设备或网络 RTT 阻塞,能继续消费队列;
  • 不同信令类型之间互不抢锁(除共享svcCtx内状态外)。

按任务 go func

SendLogic select

SipSend* channels缓冲 100

信令生产者

HTTP 内部接口

WebSocket

Catalog/心跳定时

SipSendCatalog

SipSendVideoLiveInvite

...

读队列

catalog()

VideoLiveInvite()

3. 启动屏障:InitFetchDataState

SIP Server 在Listen前执行svcCtx.InitFetchDataState.Wait()(见sip.go),保证字典、设置、流媒体列表等已从 DB RPC 拉取完毕再对外收包。避免「注册」时大量REGISTER命中未就绪配置,造成重试与无效 RPC。

SipGbsServerFetchDataLogicMainSipGbsServerFetchDataLogicMainInitFetchDataState 等待首轮数据DoneListen TCP/UDP

要点

  1. 不要把 SIP 回调里重逻辑直接阻塞:应投递到 channel 或由短函数快速返回。
  2. 缓冲深度100是折中:过小易反压 HTTP;过大掩盖积压,需配合监控。
  3. per-message goroutine在极高并发下会增加调度开销;若未来单机信令 QPS 再上一个量级,可改为固定 worker 池+ 按deviceId分片串行(当前以简单与隔离为主)。

相关代码路径

  • core/app/sev/vss/main.go— 监听、NewSipProc().DO(...)
  • core/app/sev/vss/internal/server/sip.goInitFetchDataState.Wait()
  • core/app/sev/vss/internal/logic/gbs_proc/send_sip_proc.go— 多路select+go发送
http://www.jsqmd.com/news/855157/

相关文章:

  • Perplexity音乐搜索效率提升300%:实测5种专业级查询语法与避坑清单(附2024最新API响应数据)
  • CPU、MPU、MCU与SoC:从核心概念到实战选型全解析
  • 告别Navicat!用VSCode的Database Client插件搞定MySQL、Redis连接与可视化操作
  • 从开发者视角分享Taotoken文档与示例代码的上手便捷度
  • 【大模型12步学习路线 · 第10步 · ①原理篇】LLM 微调全景:Full FT / LoRA / QLoRA / DoRA / DPO,从 PEFT 到偏好对齐
  • Perplexity数学知识查询失效真相(2024最新算法限制深度拆解):为什么你的微积分提问总得不到严谨推导?
  • Linux符号链接原理与实战:从快捷方式到系统管理核心技能
  • DDFS信号发生器的低成本实现:告别专用芯片,用STC89C52和LM324就能搞定
  • CSS3响应式设计与布局技巧
  • WordPress渗透实战:从WPScan用户枚举到Nmap特权升级的完整复现(DC-6靶场)
  • Perplexity新闻检索失效的5大根源:从Embedding错位到时间衰减权重缺失,资深NLP架构师逐行调试日志曝光
  • 艺术家、策展人、博士生紧急收藏!Perplexity艺术知识检索失效的4大信号及实时修复协议
  • 块级作用域的应用场景有哪些?
  • 【徐玉生行为数据深度分析】QiLink 项目作者自我分析1
  • LoRA微调工程2026:用有限资源做出真正有用的专属模型
  • 2460亿个数据点告诉你,人是一瞬间变老的
  • 2026年Q2苏州公司营业执照办理全流程与靠谱选择指南:苏州公司注册开户、苏州公司记账报税、苏州兼职会计代账、苏州外贸公司代理记账选择指南 - 优质品牌商家
  • 产品管理入门:掌握这10个核心概念,轻松驾驭复杂项目
  • 从编译到部署:手把手教你为你的C++项目正确链接Boost库(附CMakeLists.txt示例)
  • 嵌入式Linux开发实战:FET-MX9352-C核心板系统启动、外设调试与稳定性优化全解析
  • 苏州小微企业财税外包服务机构推荐排行盘点:苏州注册公司地址挂靠、苏州注册园区地址挂靠、苏州网上申请注册、苏州财务公司代理记账选择指南 - 优质品牌商家
  • LLM应用安全工程:防御提示词注入、越狱与数据泄露
  • 2026年AI求职工具盘点:告别死记硬背,全链路求职新方案首选“鹅来面”
  • 创业团队如何借助taotoken低成本快速验证多个ai产品创意原型
  • 2026苏州注册资金认缴服务机构排行实测盘点:苏州公司注册开户、苏州公司营业执照办理、苏州兼职会计代账、苏州小微企业财税外包选择指南 - 优质品牌商家
  • LabelImg标注VOC数据集避坑指南:从安装到批量标注的完整工作流
  • 刚发布的Perplexity v2.4.1词汇增强模块,已悄悄接入BERT-wwm-ext蒸馏模型——内测权限仅剩最后47个名额
  • CANN 学习资源指南:从入门到精通的完整路线
  • 2026白蚁防治技术分享:潮州白蚁消杀、玉林白蚁消杀、绵阳白蚁消杀、莆田白蚁消杀、衡阳白蚁消杀、赣州白蚁消杀、邵阳白蚁消杀选择指南 - 优质品牌商家
  • 2026 AI面试软件Top5测评:鹅来面,你的全链路求职制胜法宝