go3761
实现了稳定而高效的网络通讯层和灵活的规约配置层,可作为物联网行业部署在云端的采集前置程序的原型。
网络层架构
网络层分为io goroutine和worker goroutine,有点类似于netty的网络模型。当accept连接之后就启动一个goroutine来接收数据,一旦接收到数据,goroutine退出,同时将handler连同数据(事件)通过channel发给worker进行处理,在一个固定数量的worker group(池)内进行解帧和其他业务处理。处理之后再启动一个新的goroutine来接收数据。
以前采取io goroutine同时接收数据和处理数据的做法,虽然性能也不错。发现一段时间后golang的后台线程疯狂增加,而采用这种类似于reactor的模式不但提高了性能,也克服了后台线程飞涨的问题。
性能测试
性能测试结果还是不错的:
在windows上似乎很难突破c10k后性能急剧下降的限制,并发数超过1万是没问题(可以并发连接到到很大),但并发超过1万后性能急剧下降,比如并发1万1千和并发一万的性能差距相当大。应该是操作系统的问题引起的,我用的server2008R2 enterprise。
在linux上性能就好了很多,以下是测试数据
硬件配置
联想低配服务器
8 核心Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz
内存32G
软件环境
Redhat6.8
golang1.12.5
在单节点上轻松实现c50k,
5万客户端不停发送测试报文,服务端每秒40万次解帧,
从proc/xxxx/status看,线程数19个,内存占用(vmRss)保持在420M左右
资源控制的相当好,程序也很稳定。
该项目是成都地铁 8 号线延长线的施工管理系统,该项目分为
参与了能力中台的运营专区-数据看板、能力引入、产品中心、能力
整个 ERP 系统的 web 端开发使用若依框架 使用
项目描述:是经销店用来对线索进行跟进的售前系统,从收到线索中
项目描述:线索中心是负责和数百家媒体对接线索的系统,收集线索
道路运行监测与分析系统 项目描述: (1)项目简介:该项
需求方专属客服,免费梳理匹配
添加客服微信,免费为您安排与该工程师直接沟通
长按二维码添加客服微信
如当前档期不合,也可免费为您推荐相似案例作者