1、使用.NET 8 开发IoT网关黄海鹏Why.NET?1.团队背景2.应用范围3.工作效率4.前景方向技术栈、十年以上的开发经验ARM32/ARM64、Debian10/Ubuntu20.04端到端、开发速度、系统运行表现开源、持续迭代设备选型历史BCM2711PX30H3关于IoT网关eStationWebSocketeRetail¥8.98¥8.98¥8.98¥8.98¥8.98¥8.982.4GHz/BLEESLPTL现场关于IoT网关:配置eStationEtherneteth0I2CClk&DioGPIOSerial PortttyS0Serial PortttyS1Serial P
2、ortttyS2.关于IoT网关:功能eStationEtherneteth0I2CClk&DioGPIOSerial PortttyS0Serial PortttyS1Serial PortttyS2REST按键状态灯WatchdogBLEPHY6222WebSocketMQTTUDP8888BLEDS531BLEPHY6222.关于IoT网关:结构SocketWebSocketUDPBLE(Serial Port)Server SideData BufferBLE(Serial Port)Device SideData BufferTask DispatcherGPIOI2CConfigu
3、rationDisplay/ResetData ProtocolWatchdogHeartbeatFirmwareTask Queue.NET 6 升级到.NET 81.NET 6 升级到.NET 8.NET 6 启动耗时:6.886秒.NET 8 启动耗时:4.656秒.NET 8启动比.NET 6快:约33%.NET 6 升级到.NET 8同为空闲工况下,.NET 8比.NET 6:CPU负载多了10%内存多了1%(5MB)说明:机器运行觉悟变高了附加题:.NET 8 AOTSkiaSharp?ImageSharp?Linq?WebSocket?通信部分 WebSocket#用于网关与服务
4、端通信,长链接#服务端:Fleck#客户端:ClientWebSocket#线程0:保持连接Task.Factory.StartNew(async()=while(true)tryif(_socket!=null&_socket.State=WebSocketState.Open)/Next LoopReConnect(Certificate,Password);await _socket.ConnectAsync(_uri,_cancel);await _socket.SendAsync(GetDummyRegisterData(),WebSocketMessageType.Binary,t
5、rue,_cancel);await Task.Delay(TimeSpan.FromSeconds(15);catch(Exception ex)/Exception handler);通信部分 WebSocket#线程1:发送Task.Factory.StartNew(async()=while(true)tryif(_socket is null|_socket.State!=WebSocketState.Open|SendDataBuffer.IsEmpty)/Next loopif(SendDataBuffer.TryPeek(out var data)&data.Count 0)a
6、wait _socket.SendAsync(data,WebSocketMessageType.Binary,true,_cancel);DataBuffer.TryDequeue(out data);catch(Exception ex)/Exception handler);通信部分 WebSocket#线程2:接受Task.Factory.StartNew(async()=ListArraySegment cache=new();while(true)tryif(_socket is null|_socket.State!=WebSocketState.Open)/Wait threa