281 Star 1.9K Fork 696

GVP於之 / IOTGate

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md
GPL-2.0

输入图片说明

GitHub项目地址(源码优先更新码云仓库)

https://github.com/BrianApple/IOTGate

温馨提示

本项目的使用有一定的门槛,需要使用人员具备一定的物联网应用层协议知识,比如大小端、长度域等等

IOTGate开源版(基于GPL-2.0开源,请自行阅读GPL-2.0并准守相关条款,企业用户建议优先获取企业版使用权限!)

演示地址http://113.31.103.53:8686/

用户名密码随意输入: 输入图片说明 如果跳转报错则重新在地址栏输入http://113.31.103.xx:8686/ 即可正常访问!服务器资源有限,请不要对网关在线压测,谢谢!! ** 👨‍💻👨‍💻👨‍💻服务器被被挖矿木马感染了,目前木马已经被干掉,万事为了珍惜我宝贵的服务器资源就暂时不提供演示版了 **

名词解释

通信规约:应用层通信协议,与有些同学说的的“通信协议”是一个意思

IOTGate开源版压测聚合报告

win10笔记本,堆内存2g,线程数6k IOTGate开源版压测聚合报告

通过netty实现自定义协议物联网网关(单机和集群版)

window笔记本电脑本地测试:单网关单前置节点,每秒处理并发心跳8000+(根据jmeter本地最新压测统计数据),20W在线终端(长连接保持)内存占用量1G左右

心跳检测

单机版可以通过配置文件个性化配置规约的心跳周期,集群版默认300秒

入口类:

Entrance.java

IOTGate操作指南--系列博客

於之博客: https://www.xianglong.work/tag/IOTGate%E6%99%BA%E8%83%BD%E7%BD%91%E5%85%B3

於之CSDN: https://blog.csdn.net/sinat_28771747/category_8788959.html

端口占用

  • kernel模式默认端口为:10915 (-k命令行参数开启)
  • rpc通信:10915 (集群模式下开启)

命令行参数说明

参数 是否必选 是否含参 含义
-n 网关编号
-c 启动集群模式
-z zookeeper集群地址
-m 前置ip地址(不含端口,前置默认8888)
-k 开启kernel模式,默认端口为10915
-f 配置文件"iotGate.conf"的本地全路径

如何启动

自行将项目打成jar包,在linux下,执行java -jar iotGate.jar -n 1 [args...] 默认前置端口为8888,可自行源码中修改

  • 单机方式启动 :命令行参数使用“-m”指定前置服务地址
  • 集群方式启动:命令行参数“-c”开启zookeeper集群模式,“-z”指定zookeeper集群的地址(逗号分隔)
  • 单机版网关不支持IOTGateConsole控制台动态维护,因为IOTGateConsole的节点发现依赖于zookeeper,集群版网关无论节点多少依然可以通过IOTGateConsole管理

自定义网关头结构与注意事项

网关报头,是网关与前置通信时,作为网关登录和传输真实报文时携带网关自身和终端响应参数的报文,报文结构是自己定义,前置按照定义好的报文格式获取数据并做相应处理。 网关头结构如下:

报文属性 字节数 含义
AB 1byte 报文头
len 4byte 长度域:真实报文长度,包含“68”,“16”
type 1byte 报头类型
protocolType 1byte 协议类型(左侧起第一个bit为0 表示IPV4, 1表示IPV6 剩余7个bit表示规约类型编号)
gateNum 1byte 网关编号
00*12 12byte 如果ip格式为IPV4,则当前为12字节0,反之,当前得12个byte+后续得4byte存放IPV6的值,存放顺序从左至右依次
clientIP 4byte 终端的IP地址,ip地址的每个段位占一个字节(不含符号和端口号)
port 2byte 终端对应的端口号
count 4byte 终端与网关建立连接时对应的连接序号(1-10000循环)

网关发送需要向前置发送登录报文,将自己注册到前置服务中,报文说明如下:

    1. 登录时长度为0;有真实报文时,长度域为整个真实报文长度值
    1. 登录时type = 03;protocolType=15;count=1都为固定值;发送真实报文时,type=01,protocolType=00;count=终端与网关的连接序号
    1. 前置发现报头长度为0 且type = 03; protocolType=15;就不会执行解析数据的方法,否则会继续解析真实报文

网关配置文件种默认支持的两种真实报文

*“真实报文”即终端与网关通信时传输数据的报文,规约不同则报文结构差异明显
  • 规约编号为“1”,报文结构如下
报文属性 字节数 含义
68 1byte 报头
len 2byte 长度域 "传输帧中除起始字符68和结束字符16之外的帧字节总数,包含长度域本身字节数"
data n byte 报文内容
16 1byte 报尾
  • 规约编号为“2”,报文结构如下
报文属性 字节数 含义
len 4byte 长度域值为data的字节数,不包含自身字节数
data n byte 报文内容

版本

  • IOTGate-v1.0 版本为集群版网关程序,通过命令行参数动态配置网关为单节点或集群(单节点不依赖zookeeper集群) 网关与前置通讯时默认轮询方式负载均衡

  • IOTGate-v2.0.1.release IOTGate第一个正式稳定版本,可用于生产环境直接运行 !

  • IOTGate-v2.0.2.release 解决了大家反应的一些bug,优化了内存泄漏异常,单机版本增加了配置单个规约心跳的配置选项,使得不同规约心跳的管理更加灵活!

  • IOTGate-v2.0.3 IOTGate第一个正式发行版,可执行jar包下载地址 :https://gitee.com/willbeahero/IOTGate/attach_files/454348/download 前置网关演示demo下载 :https://gitee.com/willbeahero/IOTGate/attach_files/454354/download

  • master 基本功能开发完成,已经支持多规约本地配置以及IOTGateConsole远程开启/关闭/新增/删除网关多规约服务功能。后续master会继续扩展相关功能

  • IOTGate-v3.x 规划中,增加集群版能力,简化部署方式

关于多规约支持

物联网虽然火起来,但目前业内还没有比较统一的通讯规约,MQTT是目前业界使用比较广泛的物联网通讯协议了,我看了下阿里最近弄出来的物联网平台其主要也是支持MQTT物联网设备的接入,但他毕竟不是唯一的通讯规约,光我自己知道的通讯都有好几种了,而且每一种规约的报文格式都各不相同,因此,所谓多规约支持,也不可能做到所有物联网规约全支持,我目前的想法是,通过多规约得基础功能和高级功能可以将比较流行物联网规约都能够支持! 那么IOTGate如何配置实现多规约支持呢? IOTGate操作指南

IOTGate功能架构图

IOTGate开源版功能架构图

GATE CLUSTER 结构图

集群版IOTGate架构 注:图中GATE CLIENT(项目名称“IOTGateConsole”,项目地址:https://gitee.com/willbeahero/IOTGateConsole ) 是一个web工程,用户登录之后可以查看当前GATE CLUSTER的运行状态监控,并可执行网关重启、关闭、启动,网关多规约支持策略等操作:

IOTGateConsole 规约维护 更多关于IOTGateConsole的说明请到博客中查看

计划新增功能(企业版已存在,根据企业版的应用情况回馈至开源社区)

  • 单机规约心跳周期配置(已完成)
  • 数据加密
  • 启动类重构 (已完成)

IOTGate最新功能

kernel服务模式

IOTGate最新支持与master节点通信“kernel”模式,下图中,红色实现框部分为normal部署模式,黑色虚线框部分为最新支持的kernel模式,即master节点和所有的感知终端统一作为 与IOTGate服务网络通信的客户端服务 kernel服务模式

关于大家捐赠本项目的资金用途问题说明

  • 首先感谢大家对本项目一如既往的支持IOTGate,近期已经有朋友捐赠本项目,各位朋友捐赠到本项目的资金,如果后面足够购买云服务器的时候,我会用来购买一个云服务器用于部署本项目的一个演示版本,这样子也更方便大家!特此说明!

补充一点说明

  • 项目相关文档我会全部写在我自己的博客里面,请大家参阅!谢谢大家的支持!!欢迎大家提供真实的使用案例

部分已知用户

排名先后按联系作者时间顺序无特殊含义(欢迎其他使用该项目的优秀用户联系作者将贵公司名称加入本页):

  • :+1: 烟台华崟科技有限公司

  • :+1: 深圳风扇屏技术有限公司

  • :+1: 杭州物新驱动科技有限公司

  • :+1: 杭州数仓网络科技有限公司 (http://www.datanode.cn/

  • :+1: 车浴美汽车服务有限公司 (官方微信公众号: 车浴美)

HXAPIGate(零侵入式API网关)

HXAPIGate是一款基于Netty+Shiro开发的一款高性能零侵入式API网关(被代理微服务不需要任何添加代码或注解,真正的零侵入即可实现分布式特性),适用于REST微服务的API资源授权管理等。项目地址: https://gitee.com/willbeahero/HXAPIGate

浩欣泛在物联网云平台【简称:浩欣物联平台】 软著登记号:2020SR0374701 官网:www.uiotp.com

演示账号

用户名 guest001 密码 123456

简介

浩欣物联平台采用分布式微服务架构、分布式消息队列、分布式缓存、时序数据存储、流计算等技术实现的支持物联设备遥测数据采集、告警数据预警等功能的泛行业IOT物联网平台,可作为物联网上层应用的物联数据中台, 负责与各种不同规约类型的物联设备直接交互,并为上层应用提供统一的接口和响应数据格式能极大降低物联网研发的成本提高物联网研发效率。浩欣物联平台设备侧采用IOTGate企业版作为物联感知设备网络入口。浩欣物联平台受著作权保护,有兴趣的朋友可发邮件至 yangcheng068@foxmail.com

GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.

About

JAVA版基于netty的物联网高并发智能网关 expand collapse
Java and 2 more languages
GPL-2.0
Cancel

Releases (1)

All

Contributors

All

Activities

Load More
can not load any more
Java
1
https://gitee.com/willbeahero/IOTGate.git
git@gitee.com:willbeahero/IOTGate.git
willbeahero
IOTGate
IOTGate
master

Search