假设有2万个物联网设备,以mac为唯一标识,长连接到TCP服务器,数据库有实时的数据需要发给设备,如果有就马上发给设备,如果没有就什么都不做,一种方案是每个设备开启一个属于自己的定时器,查询数据库时带上设备的mac,只查询属于该设备的信息,用连接池,这种方案有个好处,由于只查询了属于设备的信息,返回结果后不需要循环就直接返回给设备了,缺点是设备多查询数据库次数多了,另一种方案是只开启一个定时器,查询数据库时把所有的信息都查出来,然后循环下发给对应的设备,这样有个好处,查询数据库次数很少了,但是每次都返回了很多数据,还要循环下发给对应的设备,各有千秋吧,不知道哪种好?个人认为最后一种方案好
你这个就是推和拉的模型,理论上你能够开2W个独立进程去定时拉取数据,就能够开2W个进程去推送数据。一样的道理,即使你用后一种模型,在推送的时候,也不需要循环下发,可以分组,比如每组100个之类的,把消息推送出去。前面那种拉模型,主要对你的数据库压力太大,一旦你的设备越来越多,这个模型是肯定要改成推模型的。如果你预估设备数量不会很多的话,可以考虑拉模型,实现比较简单,但后续的伸缩性会差一些。