夜雨聆风学习资料网

ARTICLE · 1227032

[NL源码精读] ITransport 传输层抽象:为什

[NL源码精读] ITransport 传输层抽象:为什

以前写驱动,串口、TCP、UDP全得单独写一套。Modbus是协议不是介质,凭什么走个网就得重写一遍?

NewLife.IoT用一个62行的接口把这事解耦了。驱动只认“打开、发、收、关”,底层跑什么它根本不关心。

最绝的是SendReceive这个方法。要是分开调Send和Receive,多线程下A发的请求,B可能就把响应抢走了。所以它必须是一个原子操作,把收发锁在同一把锁里,保证发了就一定能等到自己的回应。

具体实现也挺有意思。串口最复杂,有总超时和字节间隔双保险;网络层搞了个153行的抽象基类,TCP和UDP继承过去,各自只要20行代码就能搞定。

切换传输介质,驱动代码一行都不用改,换个new就行。

原文[NL源码精读] ITransport 传输层抽象:为什么 SendReceive 必须是一个方法
湖北,2小时前,

相关学习资料