|
@@ -1,6 +1,6 @@ |
|
|
# JT808DotNetty |
|
|
# JT808DotNetty |
|
|
|
|
|
|
|
|
基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 |
|
|
|
|
|
|
|
|
基于DotNetty封装的JT808DotNetty支持TCP/UDP通用消息业务处理 |
|
|
|
|
|
|
|
|
[了解JT808协议进这边](https://github.com/SmallChi/JT808) |
|
|
[了解JT808协议进这边](https://github.com/SmallChi/JT808) |
|
|
|
|
|
|
|
@@ -10,11 +10,13 @@ |
|
|
|
|
|
|
|
|
[了解JTNE协议进这边](https://github.com/SmallChi/JTNewEnergy) |
|
|
[了解JTNE协议进这边](https://github.com/SmallChi/JTNewEnergy) |
|
|
|
|
|
|
|
|
[玩一玩压力测试](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/README.md) |
|
|
|
|
|
|
|
|
[玩一玩压力测试](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/LICENSE) |
|
|
[](https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE) |
|
|
|
|
|
|
|
|
## 新网关的优势: |
|
|
|
|
|
|
|
|
## 新网关的优势 |
|
|
|
|
|
|
|
|
1. 跨平台 |
|
|
1. 跨平台 |
|
|
2. 借助 .NET Core模块化的思想 |
|
|
2. 借助 .NET Core模块化的思想 |
|
@@ -25,13 +27,16 @@ |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
## 基于WebApi的消息业务处理程序(JT808.DotNetty.WebApi) |
|
|
|
|
|
|
|
|
|
|
|
通过继承JT808.DotNetty.Core.Handlers.JT808MsgIdHttpHandlerBase去实现自定义的WebApi接口服务。 |
|
|
|
|
|
|
|
|
## 基于Grpc的消息业务处理程序(JT808.Gateway.GrpcService) |
|
|
|
|
|
|
|
|
[WebApi公共接口服务](https://github.com/SmallChi/JT808DotNetty/blob/master/api/README.md) |
|
|
|
|
|
|
|
|
``` 1 |
|
|
|
|
|
services.AddGrpcClient<JT808Gateway.JT808GatewayClient>(o => |
|
|
|
|
|
{ |
|
|
|
|
|
o.Address = new Uri("https://localhost:5001"); |
|
|
|
|
|
}); |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
## 集成接口功能(JT808.DotNetty.Abstractions) |
|
|
|
|
|
|
|
|
## 集成接口功能(JT808.Gateway.PubSub) |
|
|
|
|
|
|
|
|
|接口名称|接口说明|使用场景| |
|
|
|接口名称|接口说明|使用场景| |
|
|
|:------:|:------|:------| |
|
|
|:------:|:------|:------| |
|
@@ -44,7 +49,7 @@ |
|
|
|
|
|
|
|
|
> 使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。 |
|
|
> 使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。 |
|
|
|
|
|
|
|
|
## 基于网关的相关服务 |
|
|
|
|
|
|
|
|
## 基于网关的相关服务(JT808.Gateway.BusinessServices) |
|
|
|
|
|
|
|
|
|服务名称|服务说明|使用场景| |
|
|
|服务名称|服务说明|使用场景| |
|
|
|:------:|:------|:------| |
|
|
|:------:|:------|:------| |
|
@@ -59,82 +64,57 @@ |
|
|
|
|
|
|
|
|
| Package Name | Version | Downloads | |
|
|
| Package Name | Version | Downloads | |
|
|
| --------------------- | -------------------------------------------------- | --------------------------------------------------- | |
|
|
| --------------------- | -------------------------------------------------- | --------------------------------------------------- | |
|
|
| Install-Package JT808.DotNetty.Abstractions |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Core |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Tcp |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Udp |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.WebApi |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.WebApiClientTool |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Client |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Transmit |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Traffic |  | | |
|
|
|
|
|
| Install-Package JT808.DotNetty.SessionNotice |  | | |
|
|
|
|
|
| Install-Package JT808.DotNetty.ReplyMessage |  | | |
|
|
|
|
|
| Install-Package JT808.DotNetty.MsgLogging |  | | |
|
|
|
|
|
| Install-Package JT808.DotNetty.MsgIdHandler |  | | |
|
|
|
|
|
| Install-Package JT808.DotNetty.Kafka |  |  | |
|
|
|
|
|
| Install-Package JT808.DotNetty.RabbitMQ |  |  | |
|
|
|
|
|
|
|
|
| Install-Package JT808.Gateway |  |  | |
|
|
|
|
|
| Install-Package JT808.Gateway.Kafka|  |  | |
|
|
|
|
|
|
|
|
## 举个栗子1 |
|
|
## 举个栗子1 |
|
|
|
|
|
|
|
|
``` demo1 |
|
|
|
|
|
static async Task Main(string[] args) |
|
|
|
|
|
|
|
|
1.进入JT808.Gateway.SimpleServer项目下的Debug目录运行服务端 |
|
|
|
|
|
|
|
|
|
|
|
2.进入JT808.Gateway.SimpleClient项目下的Debug目录运行客户端 |
|
|
|
|
|
|
|
|
|
|
|
``` 1 |
|
|
|
|
|
static void 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) => |
|
|
|
|
|
|
|
|
Host.CreateDefaultBuilder(args) |
|
|
|
|
|
.ConfigureWebHostDefaults(webBuilder => |
|
|
{ |
|
|
{ |
|
|
logging.AddConsole(); |
|
|
|
|
|
logging.SetMinimumLevel(LogLevel.Trace); |
|
|
|
|
|
|
|
|
//配置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<JT808GatewayService>(); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
}) |
|
|
}) |
|
|
.ConfigureServices((hostContext, services) => |
|
|
|
|
|
|
|
|
.ConfigureServices((hostContext,services) => |
|
|
{ |
|
|
{ |
|
|
services.AddSingleton<ILoggerFactory, LoggerFactory>(); |
|
|
|
|
|
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); |
|
|
|
|
|
|
|
|
//services.Configure<KestrelServerOptions>(hostContext.Configuration.GetSection("Kestrel")); |
|
|
|
|
|
//添加Grpc服务 |
|
|
|
|
|
services.AddGrpc(); |
|
|
|
|
|
//添加JT808协议 |
|
|
services.AddJT808Configure() |
|
|
services.AddJT808Configure() |
|
|
.AddJT808NettyCore(hostContext.Configuration) |
|
|
|
|
|
.AddJT808TcpNettyHost() |
|
|
|
|
|
.AddJT808UdpNettyHost() |
|
|
|
|
|
.AddJT808WebApiNettyHost() |
|
|
|
|
|
//扩展webapi JT808MsgIdHttpHandlerBase |
|
|
|
|
|
//.ReplaceMsgIdHandler<JT808MsgIdHttpCustomHandler>() |
|
|
|
|
|
|
|
|
//添加JT808网关配置 |
|
|
|
|
|
.AddJT808Gateway(hostContext.Configuration) |
|
|
|
|
|
//添加基于Tcp的808网关 |
|
|
|
|
|
.AddJT808GatewayTcpHost() |
|
|
|
|
|
//添加基于Udp的808网关 |
|
|
|
|
|
.AddJT808GatewayUdpHost() |
|
|
.Builder(); |
|
|
.Builder(); |
|
|
//添加kafka插件 |
|
|
|
|
|
//.AddJT808ServerKafkaMsgProducer(hostContext.Configuration) |
|
|
|
|
|
//.AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) |
|
|
|
|
|
//.AddJT808ServerKafkaSessionProducer(hostContext.Configuration) |
|
|
|
|
|
//.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(); |
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
.Build() |
|
|
|
|
|
.Run(); |
|
|
} |
|
|
} |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
如图所示: |
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
## 举个栗子2 |
|
|
|
|
|
|
|
|
|
|
|
1.拉取JT808子模块 |
|
|
|
|
|
|
|
|
|
|
|
2.打开项目进行还原编译生成 |
|
|
|
|
|
|
|
|
|
|
|
3.进入JT808.DotNetty.SimpleServer项目下的Debug目录运行服务端 |
|
|
|
|
|
|
|
|
|
|
|
4.进入JT808.DotNetty.SimpleClient项目下的Debug目录运行客户端 |
|
|
|
|
|
|
|
|
|
|
|
如图所示: |
|
|
|
|
|
 |
|
|
|