Tag: netty

使用Spring + Netty的UDP服务器

我正在尝试使用Netty设置一个简单的UDP服务器,遵循此处的示例,但使用Spring进行连接依赖。 我的Spring配置类: @Configuration @ComponentScan(“com.example.netty”) public class SpringConfig { @Value(“${netty.nThreads}”) private int nThreads; @Autowired private MyHandlerA myHandlerA; @Autowired private MyHandlerB myHandlerB; @Bean(name = “bootstrap”) public Bootstrap bootstrap() { Bootstrap b = new Bootstrap(); b.group(group()) .channel(NioDatagramChannel.class) .handler(new ChannelInitializer() { @Override protected void initChannel(DatagramChannel ch) throws Exception { ch.pipeline().addLast(myHandlerA, myHandlerB); } }); return b; } @Bean(name = “group”, […]

如何在Web应用程序中使用Netty – 采取适当的配置步骤

我正在尝试将Netty设置为在我的Web应用程序中运行嵌入式。 我找到了以下文档: http : //docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/socket/http/package-summary.html#package_description ,它描述了如何配置Web。启动Netty servlet的xml文件。 现在该文件说: 其次,您必须使用本地传输将基于Netty的服务器应用程序绑定在相同的Servlet上下文或共享类加载器空间中(请参阅LocalServerChannelFactory。)您可以使用您喜欢的IoC框架(如JBoss Microcontainer,Guice和Spring)来执行此操作。 以下示例显示如何将echo服务器绑定到JBossAS 5中上面指定的端点(web.xml): 这听起来很合理,但我不清楚 – 实际上 – 应该如何运作。 假设我想使用Spring作为Ioc容器,将netty绑定到本地传输的正确bean配置是什么? 另外,我如何启动Spring上下文? 来自web.xml? 谢谢

Java SSL握手exception – “无法找到有效的证书路径”

我尝试使用安全SSL(TLS)连接和双向SSL身份validation在Java上创建服务器和客户端应用程序。 单向SSL(无客户端身份validation)运行良好。 启用客户端身份validation客户端无法与exception进行握手: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 服务器没有任何例外。 我在服务器和客户端使用Netty。 我为服务器和客户端使用自签名证书。 服务器和客户端 – 它现在是一个物理主机。 我已经使用此工具在truststore中添加了服务器证书: https://java-use-examples.googlecode.com/svn/trunk/src/com/aw/ad/util/InstallCert.java 客户代码。 主要。 public class SClientApp { public static final String HOST = “127.0.0.1”; public static final int PORT = 8888; public static void main(String[] args) throws Exception { System.setProperty(“javax.net.ssl.trustStore”, […]

用于Java的Netty和GUI

我用服务器和客户端创建了一个简单的Netty应用程序,通过控制台进行交互。 现在我正在尝试添加GUI,以便客户端可以查看/并在控制台中输入他们的消息。 我认为在用于创建频道的同一个类中创建GUI是不明智的。 以下是我的主要客户端类的示例。 public void run() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap bootstrap = new Bootstrap() .group(group) .channel(NioSocketChannel.class) .handler(new ChatClientInitializer()); Channel channel = bootstrap.connect(host, port).sync().channel(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (true) { channel.writeAndFlush((in.readLine() + “\r\n”)); } } finally { group.shutdownGracefully(); } } 如何创建GUI,以便当用户在JTextField中输入消息时,它将被传递给channel.writeAndFlush方法? 我是否在.run方法中创建GUI的实例。 我的问题的第二部分,在我的处理程序类(下面的代码)中如何将传入的消息传递给我的GUI中的JTextArea ? 这是一个非常基本的Handler类的示例。 […]

java.lang.NoClassDefFoundError:io / netty / handler / ssl / SslContextBuilder

我正在尝试实现relayrides / pushy ,但我收到以下运行时错误: Jun 28, 2017 2:06:58 PM com.turo.pushy.apns.SslUtil getSslProvider INFO: Native SSL provider not available; will use JDK SSL provider. Exception in thread “main” java.lang.NoClassDefFoundError: io/netty/handler/ssl/SslContextBuilder at com.turo.pushy.apns.ApnsClientBuilder.build(ApnsClientBuilder.java:396) at com.jobs.spring.service.NotificationServiceImpl.sendIOSPushNotification(NotificationServiceImpl.java:122) Caused by: java.lang.ClassNotFoundException: io.netty.handler.ssl.SslContextBuilder 的pom.xml org.apache.httpcomponents httpclient 4.5.2 com.turo pushy 0.10 io.netty netty-tcnative 2.0.5.Final io.netty netty-handler 4.0.27.Final com.ning async-http-client 1.9.40 com.google.code.gson gson 2.8.1 […]

netty ChannelInboundHandlerAdapter在~1500字节处削减帧

我已经实现了一个服务器应用程序,它使用netty框架使用ChannelInblundHandlerAdapter读取传入的字节。 我在标题中显示的问题是,我不定期地从客户端获取内容,我认为这样的内容在~1.500字节后被删除。 例如:在这种情况下,我应该收到一个大的JSON数组。 因为它被剪切了我无法解析它。 在使用之前,我尝试使用管道中的附加ByteToMessageDecoder通道对消息进行解码。 但这并不能解决问题。 我在JSON中没有分隔符,我可以检查并再次将两个(或更多)部分粘在一起。 这是我的管道配置: ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) { ch.pipeline().addLast(new IdleStateHandler(45,0,0)); ch.pipeline().addLast(new MyByteToMessageDecoder()); ch.pipeline().addLast(new GatewayCommunicationHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) .option(ChannelOption.SO_RCVBUF, 8192) .childOption(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(8192)) .childOption(ChannelOption.SO_KEEPALIVE, true); initRestServer(); // Bind and start to accept incoming connections. ChannelFuture f = b.bind(Config.gatewayPort).sync(); […]

工作线程在Netty被阻止

我知道netty使用Reactor模式来避免为每个连接创建一个线程,关于这个模式的核心概念是Linux中的“选择器”或epoll系统调用。 但是我也听说过如果一个处理程序从不关闭它的通道,它将占用一个工作线程并阻塞它:这并不意味着每个连接将使用(阻塞)一个线程,所以对于每个接受的套接字我们仍然需要创建一个线程? 例如,如果我编写一个具有10,000个持久连接的服务器,该服务器是否需要10,000个工作线程? 上面这两件事之间的矛盾使我感到困惑,任何人都能解释我,如果我理解错了吗? 谢谢〜 ======================================== 一个示例(只有一个工作线程),它可以始终在同一时间处理一个客户端的事件。 import java.net.InetSocketAddress; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.*; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; public class Netty_test { public static void main(String[] args) { ChannelFactory factory =new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newFixedThreadPool(1)); ServerBootstrap bootstrap = new ServerBootstrap(factory); ChannelPipelineFactory cpf=new ChannelPipelineFactory(){ public ChannelPipeline getPipeline() { return Channels.pipeline(new testHandler()); } }; bootstrap.setPipelineFactory(cpf); bootstrap.setOption(“child.tcpNoDelay”, true); bootstrap.bind(new InetSocketAddress(100)); […]

用netty摇摆客户

有没有人有一个java代码示例,展示如何将java swing GUI连接到netty 3.2.7? 目前,我已经通过netty客户端类向服务器发送消息。 netty客户端处理程序正确地接收服务器响应(在messageReceived方法中)。 问题是将此响应恢复到GUI的正确方法是什么。 当然,应用程序有许多不同的GUI需要执行相同类型的function – 即从java swing GUI发送消息,在netty客户端处理程序中接收响应(在messageReceived方法中),在java swing GUI中接收此消息。

使用netty-socketio服务器限制websockets

我们使用的是https://github.com/mrniko/netty-socketio 。 应用场景:服务器正在通过websocket以高速率将消息推送到客户端。 最近我们遇到了一个问题,即客户端无法处理来自socket.io服务器的所有事件消息。 websocket消息开始堆积,客户端变得没有响应。在Chrome开发人员工具中,我们可以看到客户端的内存逐渐增加。 使用wireshark分析tcpdump表明发生了大量重传,客户端无法应对。 我们计划在服务器端有一个限制机制。是否有任何事件/回调可用于检测慢速客户端,以便我们可以在服务器端为这个特定的websocket启动限制?

java堆内存管理内存不足

当一个netty异步服务器和客户端项目在linux上运行时,它会耗尽所有可用的内存,如下所示: 所以我在Windows上运行它,JMC显示堆如下: 我的问题是:为什么Windows和Linux的行为不同,有没有我可以配置linux jvm以释放堆内存? 为什么在Windows(GC)中有一个堆释放? 如何找出占用如此多内存的可疑代码? 编辑 :linux是4G,windows是8G,但我不认为绝对值会导致运行结果的差异。 Project不直接处理raw bytebuff,它使用HttpServerCodec和HttpObjectAggregator进行bytebuf。 在linux中运行的命令是java -jar xx.jar 。 我不仅想知道为什么不同,为什么锯齿 ,还要知道如何找到占据如此多记忆的那个 。 JMC显示了另一个数字,我不知道为什么一个线程可以有这么高的块数。 netty线程IO有一个99行71ms。 更新:现在我想找到代码的哪一部分占用了这么多内存 。 JMC堆显示EDEN SPACE非常高,我发现它并发现EDEN SPACE是用于new对象的。 最初,该项目使用了spring-boot,它有tomcat servlet 3.0作为容器和apache httpclient池用于客户端,现在只使用netty异步服务器和netty异步客户端改变了这些部分,而其他部分仍然存在(仍然使用spring for豆管理)。 所有请求共享Netty服务器和客户端处理程序(处理程序是单例spring bean)。 由于这么小的变化,我不相信new对象的数量会显着增加,因为它以1.35G内​​存结束 更新分别运行netty和springboot项目后,我获得了更多的统计数据: OS内存8G。 springboot版项目:PS老一代:容量= 195MB; 二手= 47MB; 使用率为24%。 它有692,971个对象,总大小为41,848,384。 OS存储器16G。 netty版项目:PS老一代:容量= 488MB; 使用327MB; 67%使用。 它有1,243,432个对象,总大小为221,427,824。 netty版本:堆转储显示它具有279,255个类io.netty.buffer.PoolSubpage实例,而类似org.springframework.core.MethodClassKey类的第二个最多7,222个实例。 两个版本都有服务(我们自己的类)对象有限,不超过3000。 我试图在4G内存linux上运行-Xmx1024m ,仍然会导致同样的内存不足问题。