最近因项目要求需要对接车辆的GPS,对应的是部标808协议,刚刚接手一头雾水,于是各种网上找资料,终于弄明白了,本文不介绍具体代码,主要是讲解下创建,开发,部署的整体技术思路:
开发协议的服务需要基于socket进行编程,但是建议大家不要直接使用socket来进行编程,费事费力,直接使用Netty框架,支持阻塞IO和非阻塞式IO,简简单单几行代码就搞定网络服务端,本次808使用的是非阻塞IO
处理流程:Netty 创建808服务和指定端口,终端注册根据服务所在IP和端口注册成功,自动发送GPS数据到服务端,数据以字节流的形式传递,详情参考808服务标准协议文档,通过对于的数据解析规则,对字节流进行解析,最后得到数据对象,并把数据对象保存到数据库,我这里用的是MongoDB的。
Maven的项目导出罐子时一定得注意要在pom.xml的配置,作用是指定罐子主入口和自动将依赖的JAR包也一起打包,参考以下代码,:
descriptorRefs>
manifest>
archive>
configuration>
goals>
execution>
executions>
plugin>
导出好jar包后,在linux服务器里可以创建一个专属目录存放jar文件和日志,创建好文件夹后把jar文件上传到目录里,上传命令:rz -y -y是指替换已有文件,如果是第一次上传则不需要
执行罐子,前提必须要在Linux的环境中安装好了JDK,执行罐子有几种方式:
4-1.java -jar * .jar执行java文件,当按ctrl + c或者关闭ssh弹窗时,程序运行会中断执行
4-2.java -jar * .jar&&代表在后台运行,使用ctrl + c不会中断程序的运行,但是关闭窗口会中断程序的运行。
4-3.nohup java -jar XXX.jar&使用这种方式运行的程序日志会输出到当前目录下的nohup.out文件,使用ctrl + c中断或者关闭窗口都不会中断程序的执行。
4-4.nohup java -jar XXX.jar> temp.out&> temp.out的意思是将日志输出重定向到temp.out文件,使用ctrl + c中断或者关闭窗口都不会中断程序的执行。
执行jar成功之后,可以执行ps -aux命令,查看当前所有端口详情,是否包含了本次执行的jar文件端口
端口开放使用命令:
先输入vi /etc/sysconfig/iptables 在文件里添加对应端口的开放:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20048 -j ACCEPT
然后关闭防火墙:systemctl stop firewalld 关闭防火墙
systemctl status firewalld 防火墙状态
最后开启防火墙:systemctl start firewalld 开启防火墙
nc -lp 20448&(打开20048端口,即telnet)
netstat -an | grep 20048(查看是否打开20448端口)
打开端口之后,外部的终端就可以远程注册了
本人第一次开发这个808项目,有不足的地方还请大家指出,一起探讨一起进步。