基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理
- 跨平台
- 借助 .NET Core模块化的思想
- 单机同时一万辆车在线不是梦(真有一万辆车那都很吃香了<( ̄3 ̄)> <( ̄3 ̄)> <( ̄3 ̄)> )
- 简单易上手
通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdTcpHandlerBase去实现自定义的消息业务处理程序。
通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdUdpHandlerBase去实现自定义的消息业务处理程序。
通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdHttpHandlerBase去实现自定义的WebApi接口服务。
接口名称 | 接口说明 | 使用场景 |
---|---|---|
IJT808SessionPublishing | 会话通知(在线/离线) | 有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。 |
IJT808SourcePackageDispatcher | 原包分发器 | 需要将源数据转给其他平台 |
IJT808UplinkPacket | 上行数据包处理接口 | 平台需要查看网关的上行数据日志(可以配合InfluxDB使用) |
IJT808DownlinkPacket | 下行数据包处理接口 | 平台需要查看网关的下行数据日志(可以配合InfluxDB使用) |
只要实现IJT808SessionPublishing接口的任意一款MQ都能实现该功能。
使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。
static async Task Main(string[] args)
{
var serverHostBuilder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory);
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureLogging((context, logging) =>
{
logging.AddConsole();
logging.SetMinimumLevel(LogLevel.Trace);
})
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
services.AddJT808Configure()
.AddJT808NettyCore(hostContext.Configuration)
//自定义日志下发包
.ReplaceDownlinkPacket<JT808DownlinkPacketLogging>()
//自定义会话通知(在线/离线)使用异步方式
//.ReplaceSessionPublishing<CustomJT808SessionPublishing>()
//自定义原包转发 使用异步方式
//.ReplaceSourcePackageDispatcher<CustomJT808SourcePackageDispatcher>
.AddJT808TcpNettyHost()
// 自定义Tcp消息处理业务
.ReplaceMsgIdHandler<JT808MsgIdTcpCustomHandler>()
.Builder()
.AddJT808UdpNettyHost()
// 自定义Udp消息处理业务
.ReplaceMsgIdHandler<JT808MsgIdUdpCustomHandler>()
.Builder()
.AddJT808WebApiNettyHost()
.Builder();
//webapi客户端调用
services.AddHttpApi<IJT808DotNettyWebApi>().ConfigureHttpApiConfig((c, p) =>
{
c.HttpHost = new Uri("http://localhost:828/jt808api/");
c.FormatOptions.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
c.LoggerFactory = p.GetRequiredService<ILoggerFactory>();
});
var client = services.BuildServiceProvider().GetRequiredService<IJT808DotNettyWebApi>();
var result = client.GetTcpAtomicCounter().InvokeAsync().Result;
});
await serverHostBuilder.RunConsoleAsync();
}
1.拉取JT808子模块
2.打开项目进行还原编译生成
3.进入JT808.DotNetty.SimpleServer项目下的Debug目录运行服务端
4.进入JT808.DotNetty.SimpleClient项目下的Debug目录运行客户端