swoole启动2万个定时器对性能有影响吗?
假设有2万个物联网设备,以mac为唯一标识,长连接到TCP服务器,数据库有实时的数据需要发给设备,如果有就马上发给设备,如果没有就什么都不做,一种方案是每个设备开启一个属于自己的定时器,查询数据库时带上设备的mac,只查询属于该设备的信息,用连接池,这种方案有个好处,由于只查询了属于设备的信息,返回结果后不需要循环就直接返回给设备了,缺点是设备多查询数据库次数多了,另一种方案是只开启一个定时器,查询数据库时把所有的信息都查出来,然后循环下发给对应的设备,这样有个好处,查询数据库次数很少了,但是每次都返回了很多数据,还要循环下发给对应的设备,各有千秋吧,不知道哪种好?个人认为最后一种方案好
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你这个就是推和拉的模型,理论上你能够开2W个独立进程去定时拉取数据,就能够开2W个进程去推送数据。一样的道理,即使你用后一种模型,在推送的时候,也不需要循环下发,可以分组,比如每组100个之类的,把消息推送出去。前面那种拉模型,主要对你的数据库压力太大,一旦你的设备越来越多,这个模型是肯定要改成推模型的。如果你预估设备数量不会很多的话,可以考虑拉模型,实现比较简单,但后续的伸缩性会差一些。
swoole倒是没用过,个人用go比较多; 要想知道是否对性能有影响,可以通过swoole运行后,详细监控操作系统的运行情况来观察;
网上有很多监控操作系统各项参数以及监控tcp情况的开源软件;
我知道的一个安装比较简单,数据也很详细的是 NetData