Jetty和Netty之间的主要区别是什么?
Netty是Jboss的一部分,但它是默认的Web服务器容器吗?
Netty是否支持Servlets 3.0?
我只是尝试用Java 9运行我的服务器并得到下一个警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/azureuser/server-0.28.0-SNAPSHOT.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)
我想隐藏此警告而不--illegal-access=deny在启动期间添加JVM选项.就像是:
System.setProperty("illegal-access", "deny");
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
建议使用JVM选项的所有相关答案,我想从代码中关闭它.那可能吗?
澄清 - 我的问题是关于从代码中转发此警告而不是通过类似问题中所述的JVM参数/标志.
ERROR GServerHandler - java.io.IOException: Connection reset by peer
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
该日志来自使用netty实现的游戏服务器.什么可以导致这个例外?
你能解释一下Netty如何使用线程池工作吗?我是否理解正确,有两种线程池:老板和工人.老板用来做I/O而工人用来调用用户回调(messageReceived)来处理数据?
我打算在即将开展的项目中使用Netty.该项目将充当客户端和服务器.特别是它将建立和维护与各种服务器的许多连接,同时为其自己的客户提供服务.
现在,NioServerSocketChannelFactory的文档公平地指定了服务器端的线程模型 - 每个绑定的监听端口在整个过程中都需要专用的boss线程,而连接的客户端将在工作线程上以非阻塞的方式处理.具体来说,一个工作线程将能够处理多个连接的客户端.
但是,NioClientSocketChannelFactory的文档不太具体.这似乎也利用了boss和worker线程.但是,文档说明:
一个NioClientSocketChannelFactory有一个boss线程.它根据请求进行连接尝试.一旦连接尝试成功,boss线程就将连接的Channel传递给NioClientSocketChannelFactory管理的其中一个工作线程.
工作线程似乎也以与服务器案例相同的方式运行.
我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的boss线程?如果我建立数百或数千个此类连接,这将如何扩展?
作为旁注.重新使用单个Executor(缓存线程池)作为ChannelFactory 的bossExecutor和workerExecutor是否有任何不良副作用?那么在不同的客户端和/或服务器ChannelFactory实例之间重新使用呢?这里有一些讨论,但我没有找到足够具体的答案.任何人都可以详细说明这个吗?
我需要创建一个相对简单的Java tcp/ip服务器,我在确定是否应该使用像Netty这样的东西或只是坚持使用简单的ServerSocket和InputStream/OutputStream时遇到一些麻烦.
我们真的只需要监听请求,然后将新客户端Socket传递给新线程中的某些处理代码.一旦处理完成并发送响应,该线程将终止.
我喜欢Netty中管道,解码器等的想法,但对于这样一个简单的场景,似乎不值得增加前期开发时间.对我们的初始要求来说似乎有点矫枉过正,但我有点紧张,有很多事我不考虑.如果有的话,Netty对这些简单要求有什么好处?我没有考虑什么?
我们正在编写一个用于处理消息的高性能服务器.我们已经使用Jetty好几年了,但Netty看起来有一些很酷的功能.特别是,它支持异步处理,因此线程不必等待系统处理给定的消息.它旨在解决C10k问题.
我知道Jetty在内部对NIO有一些支持.它是否也有异步模型?
消息可能是http格式.在做普通的旧http时,Netty是否比Jetty有任何性能优势?
我想拥有真正的servlet容器的所有便利功能,但不会以降低性能为代价.
.option(ChannelOption.SO_BACKLOG, 100)
Run Code Online (Sandbox Code Playgroud)
显示在Netty 4升级文档中.你能解释它的作用吗?
谢谢!
我们刚刚完成构建服务器以将数据存储到磁盘并使用Netty进行了前端处理.在负载测试期间,我们看到Netty扩展到每秒约8,000条消息.鉴于我们的系统,这看起来很低.对于基准测试,我们编写了一个Tomcat前端并运行相同的负载测试.通过这些测试,我们每秒获得大约25,000条消息.
以下是我们的负载测试机的规格:
这是Netty的负载测试设置:
以下是Tomcat的负载测试设置:
我的主要问题是为什么表现如此巨大?有没有明显的Netty可以让它比Tomcat运行得更快?
编辑:这是主要的Netty服务器代码:
NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory();
ServerBootstrap server = new ServerBootstrap(factory);
server.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
RequestDecoder decoder = injector.getInstance(RequestDecoder.class);
ContentStoreChannelHandler handler = injector.getInstance(ContentStoreChannelHandler.class);
return Channels.pipeline(decoder, handler);
}
});
server.setOption("child.tcpNoDelay", true);
server.setOption("child.keepAlive", true);
Channel channel = server.bind(new InetSocketAddress(port));
allChannels.add(channel);
Run Code Online (Sandbox Code Playgroud)
我们的处理程序看起来像这样:
public class RequestDecoder extends FrameDecoder {
@Override
protected ChannelBuffer decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) …Run Code Online (Sandbox Code Playgroud) netty ×10
java ×8
asynchronous ×2
jetty ×2
tcp ×2
apache-mina ×1
io ×1
ioexception ×1
java-9 ×1
jvm ×1
nio ×1
serversocket ×1
tomcat ×1