From 01f2f8fa751006d61f7e70bcb9fdf764689fe675 Mon Sep 17 00:00:00 2001 From: smallchi <564952747@qq.com> Date: Mon, 28 Oct 2019 09:16:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9demo=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E4=B8=BAcore3=202.=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 134 ++++++++++------- README_V1.0.0.md | 120 +++++++++++++++ README_V2.2.1.md | 140 ------------------ .../JT808.DotNetty.SimpleClient.csproj | 10 +- .../JT808.DotNetty.SimpleServer.csproj | 10 +- simples/JT808.DotNetty.Simples.sln | 13 +- src/JT808.Gateway.SimpleClient/Program.cs | 2 +- 7 files changed, 210 insertions(+), 219 deletions(-) create mode 100644 README_V1.0.0.md delete mode 100644 README_V2.2.1.md diff --git a/README.md b/README.md index 1277e7e..707b279 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # JT808DotNetty -基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 +基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 [了解JT808协议进这边](https://github.com/SmallChi/JT808) @@ -10,13 +10,11 @@ [了解JTNE协议进这边](https://github.com/SmallChi/JTNewEnergy) -[玩一玩压力测试](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README.md) - -[V2.2.1老版本](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README_V2.2.1.md) + [玩一玩压力测试](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README.md) [![MIT Licence](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE) -## 新网关的优势 +## 新网关的优势: 1. 跨平台 2. 借助 .NET Core模块化的思想 @@ -27,16 +25,13 @@ ![design_model](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/design_model.png) -## 基于Grpc的消息业务处理程序(JT808.Gateway.GrpcService) +## 基于WebApi的消息业务处理程序(JT808.DotNetty.WebApi) -``` 1 -services.AddGrpcClient(o => -{ - o.Address = new Uri("https://localhost:5001"); -}); -``` +通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdHttpHandlerBase去实现自定义的WebApi接口服务。 + +[WebApi公共接口服务](https://github.com/SmallChi/JT808DotNetty/blob/master/api/README.md) -## 集成接口功能(JT808.Gateway.PubSub) +## 集成接口功能(JT808.DotNetty.Abstractions) |接口名称|接口说明|使用场景| |:------:|:------|:------| @@ -49,7 +44,7 @@ services.AddGrpcClient(o => > 使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。 -## 基于网关的相关服务(JT808.Gateway.BusinessServices) +## 基于网关的相关服务 |服务名称|服务说明|使用场景| |:------:|:------|:------| @@ -64,57 +59,82 @@ services.AddGrpcClient(o => | Package Name | Version | Downloads | | --------------------- | -------------------------------------------------- | --------------------------------------------------- | -| Install-Package JT808.Gateway | ![JT808.Gateway](https://img.shields.io/nuget/v/JT808.Gateway.svg) | ![JT808.Gateway](https://img.shields.io/nuget/dt/JT808.Gateway.svg) | -| Install-Package JT808.Gateway.Kafka| ![JT808.Gateway.Kafka](https://img.shields.io/nuget/v/JT808.Gateway.Kafka.svg) | ![JT808.Gateway.Kafka](https://img.shields.io/nuget/dt/JT808.Gateway.Kafka.svg) | +| Install-Package JT808.DotNetty.Abstractions | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Abstractions.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Abstractions.svg) | +| Install-Package JT808.DotNetty.Core | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Core.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Core.svg) | +| Install-Package JT808.DotNetty.Tcp | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Tcp.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Tcp.svg) | +| Install-Package JT808.DotNetty.Udp | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Udp.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Udp.svg) | +| Install-Package JT808.DotNetty.WebApi | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.WebApi.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.WebApi.svg) | +| Install-Package JT808.DotNetty.WebApiClientTool | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.WebApiClientTool.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.WebApiClientTool.svg) | +| Install-Package JT808.DotNetty.Client | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Client.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Client.svg) | +| Install-Package JT808.DotNetty.Transmit | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Transmit.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Transmit.svg) | +| Install-Package JT808.DotNetty.Traffic | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Traffic.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Traffic.svg)| +| Install-Package JT808.DotNetty.SessionNotice | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.SessionNotice.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.SessionNotice.svg)| +| Install-Package JT808.DotNetty.ReplyMessage | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.ReplyMessage.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.ReplyMessage.svg)| +| Install-Package JT808.DotNetty.MsgLogging | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.MsgLogging.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.MsgLogging.svg)| +| Install-Package JT808.DotNetty.MsgIdHandler | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.MsgIdHandler.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.MsgIdHandler.svg)| +| Install-Package JT808.DotNetty.Kafka | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Kafka.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Kafka.svg) | +| Install-Package JT808.DotNetty.RabbitMQ | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.RabbitMQ.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.RabbitMQ.svg) | ## 举个栗子1 -1.进入JT808.Gateway.SimpleServer项目下的Debug目录运行服务端 - -2.进入JT808.Gateway.SimpleClient项目下的Debug目录运行客户端 - -``` 1 -static void Main(string[] args) +``` demo1 +static async Task Main(string[] args) { - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => + var serverHostBuilder = new HostBuilder() + .ConfigureAppConfiguration((hostingContext, config) => + { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .ConfigureLogging((context, logging) => { - //配置Grpc服务端 - webBuilder - .ConfigureKestrel(options => - { - options.Listen(IPAddress.Any, 5001, listenOptions => - { - listenOptions.Protocols = HttpProtocols.Http2; - listenOptions.UseHttps($"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs", "test.cer")}", ""); - }); - }) - .Configure(app => - { - app.UseRouting(); - app.UseEndpoints(endpoints => - { - //配置Grpc服务节点 - endpoints.MapGrpcService(); - }); - }); + logging.AddConsole(); + logging.SetMinimumLevel(LogLevel.Trace); }) - .ConfigureServices((hostContext,services) => + .ConfigureServices((hostContext, services) => { - //services.Configure(hostContext.Configuration.GetSection("Kestrel")); - //添加Grpc服务 - services.AddGrpc(); - //添加JT808协议 + services.AddSingleton(); + services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddJT808Configure() - //添加JT808网关配置 - .AddJT808Gateway(hostContext.Configuration) - //添加基于Tcp的808网关 - .AddJT808GatewayTcpHost() - //添加基于Udp的808网关 - .AddJT808GatewayUdpHost() + .AddJT808NettyCore(hostContext.Configuration) + .AddJT808TcpNettyHost() + .AddJT808UdpNettyHost() + .AddJT808WebApiNettyHost() + //扩展webapi JT808MsgIdHttpHandlerBase + //.ReplaceMsgIdHandler() .Builder(); - }) - .Build() - .Run(); + //添加kafka插件 + //.AddJT808ServerKafkaMsgProducer(hostContext.Configuration) + //.AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) + //.AddJT808ServerKafkaSessionProducer(hostContext.Configuration) + //.Builder(); + //webapi客户端调用 + //services.AddHttpApi().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(); + //}); + //var client = services.BuildServiceProvider().GetRequiredService(); + //var result = client.GetTcpAtomicCounter().InvokeAsync().Result; + }); + + await serverHostBuilder.RunConsoleAsync(); } ``` + +如图所示: +![demo1](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo1.png) + +## 举个栗子2 + +1.拉取JT808子模块 + +2.打开项目进行还原编译生成 + +3.进入JT808.DotNetty.SimpleServer项目下的Debug目录运行服务端 + +4.进入JT808.DotNetty.SimpleClient项目下的Debug目录运行客户端 + +如图所示: +![demo2](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo2.png) \ No newline at end of file diff --git a/README_V1.0.0.md b/README_V1.0.0.md new file mode 100644 index 0000000..1277e7e --- /dev/null +++ b/README_V1.0.0.md @@ -0,0 +1,120 @@ +# JT808DotNetty + +基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 + +[了解JT808协议进这边](https://github.com/SmallChi/JT808) + +[了解JT809协议进这边](https://github.com/SmallChi/JT809) + +[了解JT1078协议进这边](https://github.com/SmallChi/JT1078) + +[了解JTNE协议进这边](https://github.com/SmallChi/JTNewEnergy) + +[玩一玩压力测试](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README.md) + +[V2.2.1老版本](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README_V2.2.1.md) + +[![MIT Licence](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE) + +## 新网关的优势 + +1. 跨平台 +2. 借助 .NET Core模块化的思想 +3. 单机同时一万辆车在线不是梦(真有一万辆车那都很吃香了<( ̄3 ̄)> <( ̄3 ̄)> <( ̄3 ̄)> ) +4. 简单易上手 + +## 设计模型 + +![design_model](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/design_model.png) + +## 基于Grpc的消息业务处理程序(JT808.Gateway.GrpcService) + +``` 1 +services.AddGrpcClient(o => +{ + o.Address = new Uri("https://localhost:5001"); +}); +``` + +## 集成接口功能(JT808.Gateway.PubSub) + +|接口名称|接口说明|使用场景| +|:------:|:------|:------| +| IJT808SessionProducer| 会话通知(在线/离线)数据生产接口| 有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。| +| IJT808SessionConsumer| 会话通知(在线/离线)数据消费接口| -| +| IJT808MsgProducer| 数据生产接口| 网关将接收到的数据发送到队列| +| IJT808MsgConsumer| 数据消费接口| 将数据进行对应的消息业务处理(例:设备流量统计、第三方平台数据转发、消息日志等) | +| IJT808MsgReplyProducer| 应答数据生产接口|将生产的数据解析为对应的消息Id应答发送到队列 | +| IJT808MsgReplyConsumer| 应答数据消费接口| 将接收到的应答数据下发给设备| + +> 使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。 + +## 基于网关的相关服务(JT808.Gateway.BusinessServices) + +|服务名称|服务说明|使用场景| +|:------:|:------|:------| +|MsgIdHandler| 消息处理服务|从队列中消费设备上报数据,再结合自身的业务场景,将数据进行处理并入库 | +|MsgLogging | 消息日志服务|从队列中消费设备上报和平台应答数据,再将数据存入influxdb等数据库中,便于技术和技术支持排查设备与平台交互的原始数据| +|ReplyMessage| 消息响应服务| 用于响应设备上报消息,以及下发指令信息到设备| +|SessionNotice| 会话管理服务| 通知设备上线下线,对于udp设备来说,可以在设备上线时,将指令跟随消息下发到设备| +|Traffic|流量统计服务 |由于运营商sim卡查询流量滞后,通过流量统计服务可以实时准确的统计设备流量,可以最优配置设备的流量大小,以节省成本 +|Transmit| 原包转发服务|该服务可以将设备上报原始数据转发到第三方,支持全部转发,指定终端号转发| + +## NuGet安装 + +| Package Name | Version | Downloads | +| --------------------- | -------------------------------------------------- | --------------------------------------------------- | +| Install-Package JT808.Gateway | ![JT808.Gateway](https://img.shields.io/nuget/v/JT808.Gateway.svg) | ![JT808.Gateway](https://img.shields.io/nuget/dt/JT808.Gateway.svg) | +| Install-Package JT808.Gateway.Kafka| ![JT808.Gateway.Kafka](https://img.shields.io/nuget/v/JT808.Gateway.Kafka.svg) | ![JT808.Gateway.Kafka](https://img.shields.io/nuget/dt/JT808.Gateway.Kafka.svg) | + +## 举个栗子1 + +1.进入JT808.Gateway.SimpleServer项目下的Debug目录运行服务端 + +2.进入JT808.Gateway.SimpleClient项目下的Debug目录运行客户端 + +``` 1 +static void Main(string[] args) +{ + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + //配置Grpc服务端 + webBuilder + .ConfigureKestrel(options => + { + options.Listen(IPAddress.Any, 5001, listenOptions => + { + listenOptions.Protocols = HttpProtocols.Http2; + listenOptions.UseHttps($"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs", "test.cer")}", ""); + }); + }) + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(endpoints => + { + //配置Grpc服务节点 + endpoints.MapGrpcService(); + }); + }); + }) + .ConfigureServices((hostContext,services) => + { + //services.Configure(hostContext.Configuration.GetSection("Kestrel")); + //添加Grpc服务 + services.AddGrpc(); + //添加JT808协议 + services.AddJT808Configure() + //添加JT808网关配置 + .AddJT808Gateway(hostContext.Configuration) + //添加基于Tcp的808网关 + .AddJT808GatewayTcpHost() + //添加基于Udp的808网关 + .AddJT808GatewayUdpHost() + .Builder(); + }) + .Build() + .Run(); +} +``` diff --git a/README_V2.2.1.md b/README_V2.2.1.md deleted file mode 100644 index 707b279..0000000 --- a/README_V2.2.1.md +++ /dev/null @@ -1,140 +0,0 @@ -# JT808DotNetty - -基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 - -[了解JT808协议进这边](https://github.com/SmallChi/JT808) - -[了解JT809协议进这边](https://github.com/SmallChi/JT809) - -[了解JT1078协议进这边](https://github.com/SmallChi/JT1078) - -[了解JTNE协议进这边](https://github.com/SmallChi/JTNewEnergy) - - [玩一玩压力测试](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README.md) - -[![MIT Licence](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE) - -## 新网关的优势: - -1. 跨平台 -2. 借助 .NET Core模块化的思想 -3. 单机同时一万辆车在线不是梦(真有一万辆车那都很吃香了<( ̄3 ̄)> <( ̄3 ̄)> <( ̄3 ̄)> ) -4. 简单易上手 - -## 设计模型 - -![design_model](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/design_model.png) - -## 基于WebApi的消息业务处理程序(JT808.DotNetty.WebApi) - -通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdHttpHandlerBase去实现自定义的WebApi接口服务。 - -[WebApi公共接口服务](https://github.com/SmallChi/JT808DotNetty/blob/master/api/README.md) - -## 集成接口功能(JT808.DotNetty.Abstractions) - -|接口名称|接口说明|使用场景| -|:------:|:------|:------| -| IJT808SessionProducer| 会话通知(在线/离线)数据生产接口| 有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。| -| IJT808SessionConsumer| 会话通知(在线/离线)数据消费接口| -| -| IJT808MsgProducer| 数据生产接口| 网关将接收到的数据发送到队列| -| IJT808MsgConsumer| 数据消费接口| 将数据进行对应的消息业务处理(例:设备流量统计、第三方平台数据转发、消息日志等) | -| IJT808MsgReplyProducer| 应答数据生产接口|将生产的数据解析为对应的消息Id应答发送到队列 | -| IJT808MsgReplyConsumer| 应答数据消费接口| 将接收到的应答数据下发给设备| - -> 使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。 - -## 基于网关的相关服务 - -|服务名称|服务说明|使用场景| -|:------:|:------|:------| -|MsgIdHandler| 消息处理服务|从队列中消费设备上报数据,再结合自身的业务场景,将数据进行处理并入库 | -|MsgLogging | 消息日志服务|从队列中消费设备上报和平台应答数据,再将数据存入influxdb等数据库中,便于技术和技术支持排查设备与平台交互的原始数据| -|ReplyMessage| 消息响应服务| 用于响应设备上报消息,以及下发指令信息到设备| -|SessionNotice| 会话管理服务| 通知设备上线下线,对于udp设备来说,可以在设备上线时,将指令跟随消息下发到设备| -|Traffic|流量统计服务 |由于运营商sim卡查询流量滞后,通过流量统计服务可以实时准确的统计设备流量,可以最优配置设备的流量大小,以节省成本 -|Transmit| 原包转发服务|该服务可以将设备上报原始数据转发到第三方,支持全部转发,指定终端号转发| - -## NuGet安装 - -| Package Name | Version | Downloads | -| --------------------- | -------------------------------------------------- | --------------------------------------------------- | -| Install-Package JT808.DotNetty.Abstractions | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Abstractions.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Abstractions.svg) | -| Install-Package JT808.DotNetty.Core | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Core.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Core.svg) | -| Install-Package JT808.DotNetty.Tcp | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Tcp.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Tcp.svg) | -| Install-Package JT808.DotNetty.Udp | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Udp.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Udp.svg) | -| Install-Package JT808.DotNetty.WebApi | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.WebApi.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.WebApi.svg) | -| Install-Package JT808.DotNetty.WebApiClientTool | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.WebApiClientTool.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.WebApiClientTool.svg) | -| Install-Package JT808.DotNetty.Client | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Client.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Client.svg) | -| Install-Package JT808.DotNetty.Transmit | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Transmit.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Transmit.svg) | -| Install-Package JT808.DotNetty.Traffic | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Traffic.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Traffic.svg)| -| Install-Package JT808.DotNetty.SessionNotice | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.SessionNotice.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.SessionNotice.svg)| -| Install-Package JT808.DotNetty.ReplyMessage | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.ReplyMessage.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.ReplyMessage.svg)| -| Install-Package JT808.DotNetty.MsgLogging | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.MsgLogging.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.MsgLogging.svg)| -| Install-Package JT808.DotNetty.MsgIdHandler | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.MsgIdHandler.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.MsgIdHandler.svg)| -| Install-Package JT808.DotNetty.Kafka | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.Kafka.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.Kafka.svg) | -| Install-Package JT808.DotNetty.RabbitMQ | ![JT808](https://img.shields.io/nuget/v/JT808.DotNetty.RabbitMQ.svg) | ![JT808](https://img.shields.io/nuget/dt/JT808.DotNetty.RabbitMQ.svg) | - -## 举个栗子1 - -``` demo1 -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(); - services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); - services.AddJT808Configure() - .AddJT808NettyCore(hostContext.Configuration) - .AddJT808TcpNettyHost() - .AddJT808UdpNettyHost() - .AddJT808WebApiNettyHost() - //扩展webapi JT808MsgIdHttpHandlerBase - //.ReplaceMsgIdHandler() - .Builder(); - //添加kafka插件 - //.AddJT808ServerKafkaMsgProducer(hostContext.Configuration) - //.AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) - //.AddJT808ServerKafkaSessionProducer(hostContext.Configuration) - //.Builder(); - //webapi客户端调用 - //services.AddHttpApi().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(); - //}); - //var client = services.BuildServiceProvider().GetRequiredService(); - //var result = client.GetTcpAtomicCounter().InvokeAsync().Result; - }); - - await serverHostBuilder.RunConsoleAsync(); -} -``` - -如图所示: -![demo1](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo1.png) - -## 举个栗子2 - -1.拉取JT808子模块 - -2.打开项目进行还原编译生成 - -3.进入JT808.DotNetty.SimpleServer项目下的Debug目录运行服务端 - -4.进入JT808.DotNetty.SimpleClient项目下的Debug目录运行客户端 - -如图所示: -![demo2](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo2.png) \ No newline at end of file diff --git a/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj b/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj index 302c5ae..2761ddd 100644 --- a/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj +++ b/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj @@ -6,11 +6,11 @@ 7.3 - - - - - + + + + + diff --git a/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj b/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj index 13da8ba..957e378 100644 --- a/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj +++ b/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj @@ -10,11 +10,11 @@ - - - - - + + + + + diff --git a/simples/JT808.DotNetty.Simples.sln b/simples/JT808.DotNetty.Simples.sln index 7619fac..3f50bdc 100644 --- a/simples/JT808.DotNetty.Simples.sln +++ b/simples/JT808.DotNetty.Simples.sln @@ -1,12 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.168 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29418.71 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B5A80356-5AF6-449F-9D8B-3C1BBB9D2443}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol", "..\src\JT808.Protocol\src\JT808.Protocol\JT808.Protocol.csproj", "{9FCA2EE9-8253-41AA-A64C-9883413864F9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Udp", "..\src\JT808.DotNetty.Udp\JT808.DotNetty.Udp.csproj", "{C960084C-2CF4-4748-AD35-D2384285D6A3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Core", "..\src\JT808.DotNetty.Core\JT808.DotNetty.Core.csproj", "{67C5DC72-0004-48B3-BB5A-9CB7069B4F02}" @@ -45,10 +41,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.Build.0 = Release|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -110,7 +102,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {9FCA2EE9-8253-41AA-A64C-9883413864F9} = {B5A80356-5AF6-449F-9D8B-3C1BBB9D2443} {1C4CCE9B-761B-4581-B5DA-5B6D83572D56} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {AEF1E1E2-C861-4268-86F6-6F376FAF79A7} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {E503BFD8-D90A-4610-97C7-5B9A0497303B} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} diff --git a/src/JT808.Gateway.SimpleClient/Program.cs b/src/JT808.Gateway.SimpleClient/Program.cs index 1e0452d..e58a3d5 100644 --- a/src/JT808.Gateway.SimpleClient/Program.cs +++ b/src/JT808.Gateway.SimpleClient/Program.cs @@ -44,7 +44,7 @@ namespace JT808.Gateway.SimpleClient services.AddJT808Configure() .AddJT808Client(); services.AddHostedService(); - services.AddHostedService(); + //services.AddHostedService(); }); await serverHostBuilder.RunConsoleAsync(); }