選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
SmallChi 02fc285333 修改网关只序列化头部,根据头部消息id进行消息推送 6年前
api 1.修改会话管理,去掉通道Id,直接依赖设备终端号 6年前
doc 修改设计模型 6年前
src 修改网关只序列化头部,根据头部消息id进行消息推送 6年前
.gitignore 增加UI界面 6年前
.gitmodules 增加子模块 6年前
LICENSE Initial commit 6年前
README.md 1.增加redis发布通知实现及测试用例 6年前

README.md

JT808DotNetty

基于DotNetty封装的JT808DotNetty通用消息业务处理

了解JT808协议进这边

了解JT809协议进这边

玩一玩压力测试

MIT Licence

新网关的优势:

  1. 跨平台
  2. 借助 .NET Core模块化的思想
  3. 单机同时一万辆车在线不是梦(真有一万辆车那都很吃香了<( ̄3 ̄)> <( ̄3 ̄)> <( ̄3 ̄)> )
  4. 简单易上手

设计模型

design_model

集成功能实现

1.集成原包分发器

功能 说明 使用场景
ISourcePackageDispatcher 原包分发器(支持热更新、断线重连) 需要将原数据转给其他平台

2.集成WebApi服务器

WebApi接口服务

3.集成会话通知(在线/离线)

功能 说明
JT808SessionPublishingRedisImpl 基于Redis的发布通知
JT808SessionPublishingEmptyImpl 默认空实现

使用场景:有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。

只要实现IJT808SessionPublishing接口的任意一款MQ都能实现该功能。

4.集成业务消息处理程序

功能 说明 使用场景
JT808MsgIdHandlerBase 业务消息处理程序 需要自定义实现业务消息处理程序

举个栗子1

4.1.实现业务消息处理程序JT808MsgIdHandlerBase

public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase
{
    private readonly ILogger<JT808MsgIdCustomHandler> logger;

    public JT808MsgIdCustomHandler(ILoggerFactory loggerFactory,
        JT808SessionManager sessionManager) : base(sessionManager)
    {
        logger = loggerFactory.CreateLogger<JT808MsgIdCustomHandler>();
    }

    public override JT808Response Msg0x0102(JT808Request request)
    {
        logger.LogDebug("Msg0x0102");
        return base.Msg0x0102(request);
    }
}

4.2.自定义业务消息处理程序替换默认实现

services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton));

4.3.使用JT808 Host

  UseJT808Host()

4.4.完整示例

// 默认网关端口:808
// 默认webapi端口:828
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.Error);
        })
        .ConfigureServices((hostContext, services) =>
        {
            services.AddSingleton<ILoggerFactory, LoggerFactory>();
            services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
            services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton));
        })
        .UseJT808Host();
    await serverHostBuilder.RunConsoleAsync();
}