Git Product home page Git Product logo

smallchi / jt808gateway Goto Github PK

View Code? Open in Web Editor NEW
182.0 25.0 117.0 9.03 MB

JT/T808 Gateway,JT808 Gateway, GB808 Gateway(support 2011, 2013, 2019 version) JT/T808网关、JT808网关、GB808网关(支持2011、2013、2019版本)

License: MIT License

C# 97.42% Batchfile 0.31% HTML 2.22% Dockerfile 0.05%
jt808 gb808 jt808-dotnetty gps-gateway jt808-gateway dotnetcore csharp jt808-pipeline net6 808

jt808gateway's Introduction

JT808Gateway

支持TCP/UDP通用消息业务处理

MIT Licence.NET Core

集成接口功能

接口名称 接口说明 使用场景
IJT808SessionProducer 会话通知(在线/离线)数据生产接口 有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。
IJT808SessionConsumer 会话通知(在线/离线)数据消费接口 -
IJT808MsgProducer 数据生产接口 网关将接收到的数据发送到队列
IJT808MsgConsumer 数据消费接口 将数据进行对应的消息业务处理(例:设备流量统计、第三方平台数据转发、消息日志等)
IJT808MsgReplyProducer 应答数据生产接口 将生产的数据解析为对应的消息Id应答发送到队列
IJT808MsgReplyConsumer 应答数据消费接口 将接收到的应答数据下发给设备
IJT808MsgReplyLoggingProducer 网关应答数据日志生产接口 将网关能解析到直接能下发的数据发送到队列
IJT808MsgReplyLoggingConsumer 网关应答数据日志消费接口 将网关能解析到直接能下发的数据发送到日志系统

使用物联网卡通过udp下发指令时,存储的那个socket地址端口,有效期非常短,不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了,所以此处采用跟随设备消息下发指令。

基于WebApi的消息业务处理程序

通过继承JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler去实现自定义的WebApi接口服务。

接口文档

基于Pipeline

Pipeline分为两种方式使用,一种是使用队列的方式,一种是网关集成的方式。

使用方式 特性 备注
使用队列 网关不需要重启,相当于透传数据,设备上来的数据直接入队列,通过服务去处理消息。 设备多的可以这样搞,这样关注点在业务上面。
使用网关集成 网关需要根据消息业务的变化去处理,也就意味着更改业务,需要重启网关,但是上手简单。 设备少的,开发能力弱的,允许设备丢点数据的。

Pipeline的NuGet安装

Package Name Version Preview Version Downloads
Install-Package JT808.Gateway.Abstractions JT808.Gateway.Abstractions JT808.Gateway.Abstractions JT808.Gateway.Abstractions
Install-Package JT808.Gateway JT808.Gateway JT808.Gateway JT808.Gateway
Install-Package JT808.Gateway.WebApiClientTool JT808.Gateway.WebApiClientTool JT808.Gateway.WebApiClientTool JT808.Gateway.WebApiClientTool
Install-Package JT808.Gateway.Client JT808.Gateway.Client JT808.Gateway.Client JT808.Gateway.Client
Install-Package JT808.Gateway.Kafka JT808.Gateway.Kafka JT808.Gateway.Kafka JT808.Gateway.MsgIdHandler

举个栗子

Pipeline

使用网关集成方式

1.打开/simples/JT808.Simples.sln项目进行还原编译生成

2.进入JT808.Gateway.SimpleServer项目下的Debug目录运行服务端

3.进入JT808.Gateway.SimpleClient项目下的Debug目录运行客户端

如图所示: demo3

使用队列方式

1.打开/simples/JT808.Simples.sln项目进行还原编译生成

2.JT808.Gateway.SimpleQueueServer项目下的Debug目录运行服务端

3.JT808.Gateway.SimpleQueueService项目下的Debug目录运行消息处理服务

4.JT808.Gateway.SimpleQueueNotification项目下的Debug目录运行WebSocket服务 从浏览器中打开localhost:5000查看数据

5.进入JT808.Gateway.SimpleClient项目下的Debug目录运行客户端

注意:需要安装kafka和zookeeper

如图所示: demo4

Docker

此处以vscode为例,使用vscode打开当前文件夹

打包镜像

当前仅打包simples/JT808.Gateway.SimpleServer,可根据需求自行更改

  • 按下F1按键
  • 选择运行任务
  • 选择打包示例网关镜像

运行容器

  • 运行docker compose up

使用tcp工具或本项目中的示例项目测试本地808端口,

常见问题

单端口兼容多协议虽然可以实现,但是还是不建议这么做,建议最好是用端口分开,避免不必要的麻烦

jt808gateway's People

Contributors

lishewen avatar smallchi avatar waterliu99 avatar yedajiang44 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jt808gateway's Issues

StatusFlag 哪个状态是点火 哪个是熄火

我看了StatusFlag 基本都是0-3,提示是参考 JT808.Protocol.Enums.JT808Status ,
但是JT808Status的状态数据有点对不上啊?
image
是在JT808MessageHandlerImpl 接收消息时取到的数据。

GPS 设备超过2台,Channel 会频繁断开,倒置GPS设备重新注册 、鉴权.

你好作者,我用了你部分代码监听GPS设备(DotNetty TCP协议),一台设备接入的时候正常接收信息,但是当2台以上GPS 设备通讯的时候 就会出现DotNetty 主动断开Channel 的情况,这时候GPS 设备又会重新连接(重新注册、鉴权)。 这种情况会频繁出现。
我通过日志看到是先走了 CloseAsync函数 (您在注释中说是 server端主动断开)。想请您看看我的代码帮我分析一下问题(有偿)。
WX号:15141173250. 希望得到你的帮助。

出现异常后无法继续接收并处理下个JT808包

若在接收JT808包中,有一个是非JT808包,会导致异常后,无法继续接收后面正常的JT808包。经查错误代码如下:
JT808TcpServer.cs(207行)
//if (beginMark != JT808Package.BeginFlag) throw new ArgumentException("Not JT808 Packages." + "[" + beginMark.ToString() + "]");
if (beginMark != JT808Package.BeginFlag)
{
totalConsumed = seqReader.Length;
seqReader.Advance(seqReader.Length);
}

另外,若MessageHandler处理出现异常也会出现无法继续接收下个JT808包的情况。目前 ,我是在MessageHandlertry-catch所有异常,不再向上抛。

HTML5中使用websocket怎么使用此网关进行数据同步

1、gps数据通过此网关处理后,怎么通过websocket将接收到的GPS位置数据广播到所有html5页面中,h5中通过websocket获取位置数据后立刻更新位置。
2、此网关服务实例怎么扩展自定义接收到的消息呢?不是标准的808协议

IJT808MsgConsumer等接口OnMessage的元组参数问题

不太明白 这些接口里面为什么使用元组作为参数而不是强类型,目前遇到一些麻烦。在扩展RabbitMQ作为中间件时,想统一管理同进程中的订阅及分发调用,如果是强类型可以用泛型处理各个接口间不同的参数,但是目前您源码采用的是元组参数,动态调用不好处理,您设计时使用元组参数有什么特殊的原因吗?
调用的部分:
image
几个订阅的接口
image
image
image
JT808MsgConsumer的RabbitMQ实现部分
image

如何在编解码中添加自定义的编解码

大神,基于JT808DotNetty做主动安全的协议,里面的附件上传是码流方式,和信令是一个通道。原本想做一个拓展库,发现 AddJT808TcpNettyHost 这个方法里面用到类很多是internal。我想做的是在解码中再插入一个分隔符“0x30 0x31 0x63 0x64”,现在看来只有修改源码了吗?

接收808转发数据问题

大佬,接收平台方转发数据这里貌似有坑,目前有两种情况:1、连接正常情况下,对方IP端口不变,断开连接后调用item.ReceiveTimeout.Cancel()无效,超过10分钟的会话仍然存在,必须调用SessionManager.RemoveByTerminalPhoneNo方法才能移除该会话,不调用则必须重启服务,否则无法再次上线,重启服务之后也不能立即上线,需要最长10分钟才能上线。
2、对方IP不变端口一直在变,会话中存在多条该终端号记录,其中包含相同的IP端口数据,也有不同的端口。每台设备平均每10秒钟打印一条JT808SessionOnline日志。

JT808SessionManager.TerminalPhoneNoSessions数量为1500,JT808SessionManager.Sessions数量超过10万,不重启服务会话数量会一直增长,内存也随之不断增长。

有单独控制网关的start,stop功能吗

对于启动已配置好的端口的监听服务, 有单独控制器启动,暂停,结束的功能吗?
比如想集成到windows服务中运行, 在服务启动停止的时候对服务进行控制

Docker 下报错,ubuntu 下运行也是这个错,我弄到 CentOS 没问题,但是 在CentOS 下 Docker 就报错

dbug: Microsoft.Extensions.Hosting.Internal.Host[1]
Hosting starting
Unhandled exception. System.Net.Sockets.SocketException (13): Permission denied
at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName)
at System.Net.Sockets.Socket.UpdateStatusAfterSocketOptionErrorAndThrowException(SocketError error, String callerName)
at JT808.Gateway.JT808TcpServer.InitServer() in /_/src/JT808.Gateway/JT808TcpServer.cs:line 82
at JT808.Gateway.JT808TcpServer..ctor(IOptionsMonitor1 configurationMonitor, IJT808MsgProducer msgProducer, IJT808MsgReplyLoggingProducer msgReplyLoggingProducer, JT808MessageHandler messageHandler, IJT808Config jT808Config, ILoggerFactory loggerFactory, JT808SessionManager jT808SessionManager, JT808BlacklistManager jT808BlacklistManager) in /_/src/JT808.Gateway/JT808TcpServer.cs:line 75 at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(ServiceIdentifier serviceIdentifier) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
at Program.

$(String[] args) in /Users/leida/MyCode/PandaServer/PandaServer.JT808Server/Program.cs:line 37

自定义了 5808 5000 端口都EXPOSE 了

Run in Ubuntu 18.04 arm64 error

Dears,

Great project,now I can build this project on Ubuntu arm64 platform, but encounter below error when I run the JT808.Gateway.SimpleServer, could you give me some help or hints to fix it, sorry for this naive problem.

bin/Debug/netcoreapp3.1/JT808.Gateway.SimpleServer
dbug: Microsoft.Extensions.Hosting.Internal.Host[1]
Hosting starting
info: JT808TcpServer[0]
JT808 TCP Server start at 0.0.0.0:808.
info: JT808TcpReceiveTimeout[0]
[Check Receive Timeout]
info: JT808TcpReceiveTimeout[0]
[Session Online Count]:0
info: JT808UdpServer[0]
JT808 Udp Server start at 0.0.0.0:808.
info: JT808UdpReceiveTimeout[0]
[Check Receive Timeout]
info: JT808UdpReceiveTimeout[0]
[Session Online Count]:0
fail: JT808TransmitService[0]
初始化配置链接远程服务端all_127.0.0.1:20000,链接异常:System.Net.Sockets.SocketException (111): Connection refused
at System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext, AsyncCallback callback, Object state)
at System.Net.Sockets.Socket.UnsafeBeginConnect(EndPoint remoteEP, AsyncCallback callback, Object state, Boolean flowContext)
at System.Net.Sockets.Socket.BeginConnect(EndPoint remoteEP, AsyncCallback callback, Object state)
at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP)
at JT808.Gateway.Transmit.JT808TransmitService.InitRemoteServsers()
Unhandled exception. System.IO.IOException: Error loading native library "/root/dotnet/JT808Gateway/simples/JT808.Gateway.SimpleServer/bin/Debug/netcoreapp3.1/runtimes/linux/native/libgrpc_csharp_ext.x64.so".
at Grpc.Core.Internal.UnmanagedLibrary..ctor(String[] libraryPathAlternatives)
at Grpc.Core.Internal.NativeExtension.LoadUnmanagedLibrary()
at Grpc.Core.Internal.NativeExtension.LoadNativeMethods()
at Grpc.Core.Internal.NativeExtension..ctor()
at Grpc.Core.Internal.NativeExtension.Get()
at Grpc.Core.Internal.NativeMethods.Get()
at Grpc.Core.GrpcEnvironment.GrpcNativeInit()
at Grpc.Core.GrpcEnvironment..ctor()
at Grpc.Core.GrpcEnvironment.AddRef()
at Grpc.Core.Server..ctor(IEnumerable`1 options)
at Grpc.Core.Server..ctor()
at JT808.Gateway.JT808GrpcServer.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at JT808.Gateway.SimpleServer.Program.Main(String[] args) in /root/dotnet/JT808Gateway/simples/JT808.Gateway.SimpleServer/Program.cs:line 61
at JT808.Gateway.SimpleServer.Program.

(String[] args)
Aborted (core dumped)

运行JT808.Gateway.SimpleServer报错,不能连接127.0.0.1:20000

编译完毕后,运行 JT808.Gateway.SimpleServer.exe 时出现下面的错误:
fail: JT808.Gateway.Transmit.JT808TransmitService[0]
该终端all已尝试未连接上该服务器127.0.0.1:20000
System.Net.Sockets.SocketException (10061): 由于目标计算机积极拒绝,无法连接。

这个监听20000端口的是哪个程序?怎么启动?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.