了解netty通道缓冲区和水印
我试图了解Netty缓冲区和水印. 作为测试用例,我有一个网络服务器,它写信给客户端,客户被阻止(本质上的睡眠在每个读取之间为10秒) 在正常的I/O TCP下,将会限制(由于流量控制,发送速度放慢速度),如果接收器被阻塞,则在这里不是这种情况.发件人似乎在每次发送上都保持写作和冲洗数据.这些数据在哪里写? Netty的Flush()也会有流量控制吗? See: https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control 是将其写入OS或TCP缓冲区,Netty通道也有内部缓冲区吗?如果是这样,我该如何配置? i跟踪bytesbeforeuntable,但它们似乎并没有减少 默认高和低水印是什么?我没有在应用程序中设置任何东西.有什么办法可以使用它吗? 代码下面: @Override public void channelRead(final Chann
6 2024-04-04
编程技术问答社区
Netty UDP处理程序-异步的?
正在为具有多个处理程序的UDP服务器工作. 查看我的代码如何引导通道. return new Bootstrap(). group(rtpNioEventLoopGroup()). channel(NioDatagramChannel.class). handler(saveToRepoHandler()). handler(informPartyHandler()); 现在,我的保存repo和信息派对需要异步执行.他们彼此没有依赖. Netty是否会异步执行它们? 解决方案 多次调用处理程序(...)只会替换上一个设置的处理程序.您想使用ChannelInitializer并在此处添加ChannelHandler.检查我们的示例或Javadocs以获取详细信息.
0 2024-03-18
编程技术问答社区
对出站的ChannelHandler进行全面的异常处理
在Netty中,您有入站和出站处理人员的概念.仅通过在管道的末端(尾巴)添加通道处理程序并实现exceptionCaught替代而实现了全部入站异常处理程序.沿着入站管道发生的例外将沿着处理人员行驶,直到遇到最后一个,如果没有沿途处理. 与外向处理者没有完全相反的相反.相反(根据Netty在行动中,第94页)您需要将侦听器添加到 channel的 Future或一个传递到Promise的侦听器中>. 我不确定在哪里插入前者,我以为我会去找后者,所以我做了以下ChannelOutboundHandler: /** * Catch and log errors happening in the outgoing direction * * @see p94 in "Netty In Action" */ private ChannelOutboundHandlerAdapter createOutgoi
2 2024-03-18
编程技术问答社区
如何在Netty通道处理程序中安全地执行阻塞操作?
我正在构建一个基于NetTy的小型应用程序,该应用程序在插座连接(即telnet/ssh)上执行I/O操作.我正在使用Netty的ServerBootstrap类启动插座服务器,给它: 类型NioEventLoopGroup的事件循环(即,不应受到阻止操作的共享线程池). 类型NioServerSocketChannel的通道(我相信这是与上面的#1相对应的). 一个非常简单的管道,带有延伸ChannelInboundHandlerAdapter的通道处理程序. 每当从客户端套接字连接接收命令字符串时,我的处理程序的channelRead(...)方法都会调用,并根据命令返回一些响应字符串. 一切都很好,对于不涉及不阻止操作的命令.但是,我现在需要从某些命令中阅读或写入数据库.那些JDBC的调用本质上会阻止...尽管我可以使用CompletableFuture(或其他)在单独的线程中处理它们. 但是,即使我通过在单独的线程中执行阻止操作进行了"滚动my
0 2024-03-18
编程技术问答社区
使用Netty的异步HTTP客户端
我是Netty的新手,仍然渴望找到自己的路.我希望创建一个异步工作的HTTP客户端. HTTP的Netty示例仅显示如何等待IO操作,而不是如何使用 addListener ,因此我一直在尝试弄清楚这一点. 我正在尝试创建一个请求类,该课程将处理请求的所有不同状态,从连接,发送数据,处理响应然后关闭连接. 为了做到这一点,我的类扩展了 simplechannelupstreamhandler 并实现了 channelfuturelisteristener .我使用 ChannelPipelineFactory ,添加了(this)实例的类(作为 simplechannelupstreamhandler )作为处理程序. 这样创建了连接: this.state = State.Connecting; this.clientBootstrap.connect(this.address).addListener(this); 然后 OperationComplete 方法
4 2024-03-18
编程技术问答社区
长时间轮询 netty nio framework java
我如何使用 netty 框架进行长时间进行长音调?例如,我提取http://localhost/waitforx 但是waitforx是异步的,因为它必须等待事件?例如,它从阻塞队列中获取一些东西(只有在排队中的数据时才能获取).从队列获得项目时,我想将数据发送回客户端.希望有人可以给我一些技巧. 非常感谢 解决方案 您可以先编写一个响应标头,然后从其他线程中发送正文(内容). void messageReceived(...) { HttpResponse res = new DefaultHttpResponse(...); res.setHeader(...); ... channel.write(res); } // In a different thread.. ChannelBuffer partialContent = ...; channel.write(partialContent); 其他解决方案 您可
2 2024-03-18
编程技术问答社区
使用Action.async有什么影响,因为Play使用的是Netty,它是无阻塞的。
由于Netty是一台非阻止服务器,因此将操作更改为使用.async? 有什么影响 def index = Action { ... } vers def index = Action.async { ... } 我明白,使用.async您将获得Future[SimpleResult].但是,由于Netty是非障碍的,因此无论如何都会在封面下做类似的事情吗? 这将对吞吐量/可伸缩性产生什么影响?这是一个很难回答依赖其他因素的问题吗? 我要问的原因是,我有自己的自定义Action,我想重置每个页面请求的cookie超时,所以我正在这样做,这是async async致电: object MyAction extends ActionBuilder[abc123] { def invokeBlock[A](request: Request[A], block: (abc123[A]) => Future[SimpleResult]) = { ...
0 2024-03-18
编程技术问答社区
使用Jetty还是Netty?
我们正在编写用于处理消息的高性能服务器的过程.我们已经使用Jetty了几年了,但是Netty看起来有一些很酷的功能.特别是,它具有异步处理的支持,因此不必将线程绑起来等待系统处理给定消息.它旨在解决C10K问题. 我知道码头在内部对Nio有所支持.它也有异步模型吗? 这些消息可能是以HTTP格式的. Netty在做普通的旧http时是否具有比码头的性能优势? 我想拥有一个真实servlet容器的所有方便功能,但不能以降低性能为代价. 解决方案 Jetty自第6版以来一直支持异步请求处理(请参见在这里)专有API.最近的版本像其他任何合规实现一样,支持异步API作为Servlet 3.0 API的一部分. 除非您有高度具体的要求,否则使用Netty似乎很少做.否则,Jetty会以最小的努力为您完成这项工作.
2 2024-03-18
编程技术问答社区
在有许多客户连接的情况下,Netty的线程模型是如何工作的?
我打算在即将到来的项目中使用Netty.该项目将同时充当客户端和服务器.特别是它将建立并保持与各种服务器的许多连接,同时为自己的客户服务. 现在, nioserversocketchannelfactory 公平地指定事物服务器端的线程模型 - 每个界的侦听端口都需要在整个过程中使用专用 boss 线程,而连接的客户端将在非非关联客户端进行处理. - worker 线程上的封锁方式.具体来说,一个工作线程将能够处理多个连接的客户端. 然而, nioclientsocketchannelfactory 较少具体.这似乎也利用了 boss 和 worker 线程.但是,文档指出: 一个nioclientsocketchannelfactory具有一个boss线.它根据要求进行连接尝试.连接尝试成功后,Boss线程将连接的通道传递到Nioclentsocketchannelfactory管理的一个工作线程之一. 工作线程似乎也以与服务器情况相同的方式工作. 我的问
2 2024-03-18
编程技术问答社区
缺少用于netty-transport-native-epoll的osx-aarch_64分类器版本
我正在研究一个项目,我需要" Netty-Transport-native-Epoll"库. 我正在使用Apple M1 MacBook Pro,但我无法下载其用于OSX-AARCH_64分类器. 但是我可以下载此罐子: io.netty netty-transport-native-kqueue osx-aarch_64 4.1.63.Final ,但我无法解决以下依赖性: io.netty netty-transport-native-epoll osx-aarch_64
0 2024-03-02
编程技术问答社区
Netty版本与Spark+Elasticsearch传输的冲突
这有几个以前的问题,有答案,但是答案通常没有足够的信息来解决问题. 我正在使用Apache Spark,将数据吸收到Elasticsearch中.我们正在使用X-Pack Security及其相应的运输客户端.我正在使用运输客户端在特殊情况下创建/删除索引,然后使用Spark进行摄入.当我们的代码到达client.close()时,就会抛出一个例外: Exception in thread "elasticsearch[_client_][generic][T#2]" java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig; at org.elasticsearch.transport.netty4.Netty4Transport.lambda$stopInternal$5(Netty4Transport.java
2 2024-02-29
编程技术问答社区
Spark 2.3.0 netty版本问题。NoSuchMethod io.netty.buffer.PooledByteBufAllocator.metric()
我刚刚将Spark Project从2.2.1升级到2.3.0,以找到下面的版本控制.我对Spark-Cassandra-Connector.2.0.7和Cassandra-driver-core.3.4.4有依赖性,从dataStax中,这反过来依赖于Netty 4.x,而Spark 2.3.0则使用3.9.x. 在Spark 2.3.0中介绍了引起异常的类,org.apache.spark.network.util.util.nettymemorymetrics. 在异常方面唯一的途径是降级我的Cassandra依赖性吗?谢谢! Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric; at org.apache.spark.n
10 2024-02-29
编程技术问答社区
要使apache camel上的API有(SSL)实现HTTPS,最理想的方法是什么?
我希望通过启用https创建我的API.我已经对各种方式进行了一些阅读(使用Jetty,Netty等),但是我想知道哪种最简单,最有效的方法是在我的基于骆驼的API中实现SSL.这是我当前的配置,我更喜欢(为简单起见,如果我可以使用netty4-http) public void configure() { restConfiguration() .component("netty4-http")//Specifies the Camel component to use as the REST transport .host("0.0.0.0")//The hostname to use for exposing the REST service .port(8080).bindingMode(RestBindingMode.auto) .rest("/v1/API.Endpoint") 谢谢大家! 解决方案
2 2024-02-28
编程技术问答社区
ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter是否影响netty4中运行编码器和解码器的顺序?
我正在使用netty4实现编码器和解码器. 当我扩展类型ChannelInBoundHandlerAdlerAdapter的解码器和类型ChannelOutBoundBoundHandlerAdapter的编码器时,它应该是什么运行序列? 第一个编码器,然后再解码. 第一个解码器,然后编码. 另外,如何如何使用ChannelOutBoundHandlerAdlerAdlerAdleradapter和ChanneInboundHandlerAdlerAdapter效果阅读(I/O)和写作(I/O),应在哪里使用什么? 解决方案 注意以下内容: ChannelInboundHandler - 流程数据和各种状态的变化ChannelOutboundHandler - 处理出站数据,并允许拦截所有操作 例如,当您从插座读取数据当您将数据写入通道时,要实现编码器和解码器,您可以在netty中扩展预定义的解码器和编码器,例如ByteToMessageDecod
8 2024-02-28
编程技术问答社区
为什么我的Camel Netty路由会在我的JMS消息的开头添加换行?
我有一个骆驼网路线,该路由将XML发送到服务器端口并将其放入JMS消息中.在第一条消息之后,其他所有消息都在消息的顶部有一个newline,导致我的XML在GUI接收到时未能拆卸. 我的路线看起来像这样: 注意:XML不是终止的newline,因此需要自定义帧分配器解码器. 解决方案 尝试设置: 问题是camel-ne
0 2024-02-28
编程技术问答社区
如何使用Apache Camel Netty4在异步模式下通过已建立的TCP连接发回一个响应?
我正在构建使用NetTy4 Component(@Override public void configure() throws Exception { this.from("netty4:tcp://localhost:7000?textline=true&encoding=utf8") .process(new Processor() { @Override public void process(final Exchange exchange) throws Exception { log.info("[Processor] - Incoming Message -> {}", exchange.getIn().getBody(String.class)); } }).to("bean:messageService"); } 好吧,我正在接受通常的消息.要测试,我使用telnet: $ telnet localhost 7000 Trying 127.0.0.1...
0 2024-02-28
编程技术问答社区
Netty: 使用 "IdleStateHandler "来检测断线情况
我阅读了 根据我的理解,在处理程序内部,当客户断开连接时,方法channelInactive()是触发的, 然后使用IdleStateHandler,当指定的时间段内未执行读取时,IdleState.READER_IDLE将被触发, 然后,在客户端的3秒内,我关闭了频道,并期望channelInactive将是触发的,但不是,为什么? initializer public class ServerInitializer extends ChannelInitializer { String TAG = "LOG: "; @Override protected void initChannel(SocketChannel ch) throws Exception { System.out.println(TAG + "Starting ServerInitializer class...");
4 2024-02-05
编程技术问答社区
调用Azure存储相关的java API时抛出的java.lang.NoSuchMethodError异常
将线程留在此处,可能会遇到相同问题的其他人. 我正在尝试从Azure container通过代码读取blob: public static void main(String[] args) { String connectStr = "it's a workable connection string..."; // Create a BlobServiceClient object which will be used to create a container client BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient(); String containerName = "eugenecontainer"; BlobContainerClient blobCon
4 2024-01-25
编程技术问答社区
Play框架[2.5.0 java]-阻断netty-event-loop线程导致超时
我们刚刚从游戏框架2.4.3升级到2.5.0(Java).但是,升级后,我们的测试在几分钟后开始暂停.在升级之前,他们跑了一个小时没有错误. 看起来有些线程被阻止了,系统只是停止响应. 我使用YourKit Java Profiler在机器上本地运行较小版本的负载测试.最初,有16个netty-event-loop线程.大约一分钟后,我可以看到他们已经开始阻止: 当它们阻止时,我开始在加载测试中获得超时. 当我关闭测试时,这些线程似乎恢复了: 我希望这里有人可以帮助我们确定是什么原因引起的.除了升级到播放2.5所需的更改外,我们还没有修改代码. . 这是我们在application.conf中使用的Akka线程池配置: akka { fork-join-executor { # The parallelism factor is used to determine thread pool size using the # follow
6 2024-01-22
编程技术问答社区
找不到TLS ALPN供应商;没有可用的netty-cnative、Conscrypt或Jetty NPN/ALPN。
您正在使用什么版本的GRPC? 1.13.1 我正在使用Java 8来构建可执行的罐子.以下是Java版本: $ /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-2~14.04-b11) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode) 我正在使用Gradle 3.4.1来生成JAR,如下所示: /opt/gradle-3.4.1/bin/gradle jar -Dorg.gradle.java.home=/usr/lib/jvm/java-1.8.0-openjdk-amd64/ 以下是模块级构建中定义的依赖项.gradle文件: dependencies {
22 2024-01-20
编程技术问答社区