1、增加两路推送功能,推送本地和推送老服务器

This commit is contained in:
weidong 2024-12-03 11:09:51 +08:00
parent dc1813630d
commit e05e5092e4
4 changed files with 134 additions and 1 deletions

View File

@ -0,0 +1,24 @@
package com.imdroid.ntripproxy.service;
public class Ntrip2Channels {
final private String localHost="127.0.0.1";
final private int localPort=9903;
final private String remoteHost="47.107.50.52";
final private int remotePort=9903;
public static final Ntrip2Channels INSTANCE = new Ntrip2Channels();
UDPClient localRtcm;
UDPClient remoteRtcm;
private Ntrip2Channels() {
localRtcm = new UDPClient();
remoteRtcm = new UDPClient();
localRtcm.init(localHost, localPort);
remoteRtcm.init(remoteHost, remotePort);
}
public void send(byte[] data) {
localRtcm.send(data);
remoteRtcm.send(data);
}
}

View File

@ -0,0 +1,48 @@
package com.imdroid.ntripproxy.service;
import com.imdroid.common.util.DataTypeUtil;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.socket.DatagramPacket;
import io.netty.util.ReferenceCountUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* @author Layton
* @date 2023/2/13 11:47
*/
@ChannelHandler.Sharable
@Component
public class UdpHandler2 extends ChannelInboundHandlerAdapter {
private static final Logger logger = LoggerFactory.getLogger(UdpHandler2.class);
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
DatagramPacket packet = (DatagramPacket) msg;
try {
if (packet.content() == null) {
return;
}
byte[] data = new byte[packet.content().readableBytes()];
packet.content().getBytes(0, data);
Ntrip2Channels.INSTANCE.send(data);
logger.debug("receive message:" + DataTypeUtil.getHexString(data));
} catch (Exception e) {
logger.error("channel read error: {}", e.toString());
} finally {
ReferenceCountUtil.release(msg);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause);
logger.error("Exception caught: {}", cause.toString());
}
}

View File

@ -0,0 +1,55 @@
package com.imdroid.ntripproxy.service;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* @author Layton
* @date 2023/2/13 11:47
*/
@Component
public class UdpServer2 implements ApplicationRunner {
private final Logger logger = LoggerFactory.getLogger(UdpServer2.class);
@Value("${ntrip.proxy2.port}")
private Integer port;
@Autowired
private UdpHandler2 udpHandler;
@Override
public void run(ApplicationArguments args) throws Exception {
new Thread(this::start0, "ntrip2-proxy").start();
}
private void start0() {
EventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(group)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_SNDBUF, 1024*1024) //1M缓存考虑1000个基站同时转发
.option(ChannelOption.SO_RCVBUF, 1024*1024)//1M缓存断点续传要大带宽
.handler(udpHandler);
try {
ChannelFuture future = bootstrap.bind(port).sync().channel().closeFuture();
logger.info("ntrip2 proxy start at port {}", port);
future.await();
} catch (Exception e) {
logger.error("Error starting Imdroid protocol at port {}", port, e);
} finally {
group.shutdownGracefully();
}
}
}

View File

@ -15,5 +15,11 @@ ntrip.proxy.port = 11001
ntrip.server.host = 47.107.50.52
ntrip.server.port = 11003
ntrip.proxy2.port = 11002
ntrip.server2.host = 47.107.50.52
ntrip.server2.port = 9903
#ntrip.server2.host = 127.0.0.1
#ntrip.server2.port = 9913
rtcm.server.host = 127.0.0.1
rtcm.server.port = 9903
rtcm.server.port = 9903