做模具这行久了,大家都有体会:车间里几十台数控机床、电火花机、线切割同时跑,每台设备的状态、刀具寿命、加工进度都得实时传到中控室。以前我们用HTTP轮询,每台设备每两秒发一次GET请求,结果网络一忙就卡顿,数据还经常丢包。后来换成了RPC,情况立马改观。其实道理很简单,HTTP每次请求都要建立TCP连接,握手、挥手来来回回,就像每换一把刀都要重新对一次刀,浪费的时间全在空行程上。而RPC走的是TCP长连接,连接建立后一直保持,数据像流水线一样持续传输,省去了反复握手的开销。
具体到模具加工场景,RPC的优势更明显。比如我们给注塑模的模温机做远程监控,用HTTP轮询时,一个车间200台设备,每台每秒一次请求,服务器光处理握手就要占掉不少资源。换成RPC后,长连接下服务器可以同时挂上千个连接,而且RPC协议本身自带序列化和反序列化机制,传输的是二进制数据,比HTTP的文本JSON省带宽。实测下来,同样的数据量,RPC的响应时间从原来的平均80毫秒降到了15毫秒左右,网络占用率也下降了近七成。这对我们这种需要实时采集温度、压力、振动数据的场景太关键了。
当然,RPC也不是万能药。早期我们用过某开源RPC框架,发现它对服务端的线程模型要求很高,如果连接数过多,线程池一满,反而比HTTP还慢。后来我们调整了连接池大小,给每台设备单独分配一个连接,并且设置了心跳检测,每30秒发一次心跳包,防止死连接占用资源。另外,RPC的调试比HTTP麻烦,HTTP可以直接用浏览器看返回结果,RPC得靠专门的工具抓包。所以现在我们的做法是:内部设备间的高速数据交换用RPC,对外接口或者跟供应商系统对接,还是保留HTTP,毕竟通用性好。
说到底,选RPC还是HTTP,得看场景。模具车间的内部通信,数据量大、频率高、实时性要求严,RPC的长连接和二进制传输优势明显;而跨系统、跨企业的数据交换,HTTP的简单直接更稳妥。我们现在的架构就是“内RPC外HTTP”,既保证了车间内部的响应速度,又不影响跟外部系统的兼容性。这套方案用了两年多,设备联网率从原来的85%提升到了98%,故障报警的延迟也从秒级降到了毫秒级。搞模具的兄弟如果也在做数字化改造,不妨试试这个思路,成本不高,效果却实实在在。