草庐IT

Netty-NIO基础

全部标签

java - 如何使用 Apache Camel Netty4 在异步模式下通过已建立的 TCP 连接发回响应?

我在消费者模式下使用Netty4组件(http://camel.apache.org/netty4.html)构建一个具有ApacheCamel路由的微服务。因此,在我的微服务中,我正在构建的这条路由将通过TCP连接接收消息。为此,我这样做了:@Overridepublicvoidconfigure()throwsException{this.from("netty4:tcp://localhost:7000?textline=true&encoding=utf8").process(newProcessor(){@Overridepublicvoidprocess(finalExch

java - (Java 7 NIO.2) 监视服务线程的自定义名称

在Java7中使用nio.2,当您创建这样的watch服务时:WatchServicewatcher=FileSystems.getDefault().newWatchService();然后,启动后台线程,在无限循环中轮询文件系统事件。此线程的名称是“Thread-n”,这在调查线程转储或分析session期间有点麻烦。我们可以更改该线程的名称吗? 最佳答案 直接看实现,好像不行。如果您不介意一些小技巧,您可以找到线程并重命名它。类似于(//TODO:进行错误检查)SetthreadsBefore=Thread.getAllSta

java - 如何在 Netty 中根据 URI 路由请求?

我是Netty的新手,为了更加熟悉它,我正在构建一个简单的HTTP服务器。我想做的一件事是处理基于URI的路由。我四处寻找示例并找到了一些方法,想看看哪种方法最有意义。有一个“路由”处理程序,可以根据HTTPMessage中的URI添加/删除其他处理程序。如果我必须为每个请求都这样做,这似乎效率很低。让“路由”处理程序将HTTPMessage和HTTPContent包装在另一个对象中,然后将其传递给适当的处理程序。例如,我可以有一个扩展SimpleChannelInboundHandler的InfoHandler和路由器InfoHTTPRequest对象。通过这种方式,管道保持固定,我

Java 7 的 nio.file 包在创建新文件时非常慢

我正在尝试从java程序创建300M文件,我从旧文件API切换到新的java7nio包,但新包比旧包更慢。与使用旧文件API时相比,我发现CPU利用率较低,但我正在运行这个简单的代码,我获得了0.5兆字节/秒的文件传输速率,并且来自java的写入正在从一个磁盘读取并写入另一个(写入是访问磁盘的唯一进程)。Files.write(FileSystems.getDefault().getPath(filePath),fiveToTenKBytes,StandardOpenOption.CREATE);这里有没有希望得到合理的吞吐量?更新:我正在从大文件中解压3亿个5-10k字节的图像文件。

Java NIO 适合低延迟还是高吞吐量?

我是JavaNIO新手,用过一点。我有一个一般性的查询。如果您正在设计超低延迟应用程序与高吞吐量应用程序,那么使用非阻塞IO后两者中哪一个明显受益?我的理解是,非阻塞IO肯定有助于提高吞吐量,因为工作线程不会阻塞,因此不会等待响应,并且可以自由触发新请求,直到之前的请求得到服务。一旦我们获得对先前触发的请求的响应,工作线程就可以异步处理它们,从而提高吞吐量。但是,我看不出非阻塞IO如何直接有利于低延迟应用程序。我想“异步行为是避免争用的好方法。”如果是这样的话,低争用意味着低延迟。因此NIO可能有助于降低延迟。有道理吗? 最佳答案

java - 首次连接后 Netty 服务器不接受连接

我在运行使用Netty的服务时遇到问题。它启动并正常工作,但只有一次。之后没有连接被接受(它们被立即丢弃)。我有多个监听器,每个监听器只接受一个连接,之后就不可能连接到同一个监听器。代码这是我的Listener.java:publicclassListener{/*...*/publicvoidrun(){//checkifthereisanysenseinrunningthislistenerif(this.address==null){this.logger.info("\"{}\"wasnotenabledforconnection,nopointtostartit.",this

java - Gson:序列化 java.nio.Path 导致 StackOverflowError

序列化它,导致StackOverFlowError:importjava.nio.file.Path;importjava.nio.file.Paths;publicclassTmp{privatePathpath=null;publicTmp(){path=Paths.get("c:\\temp\\");}}在我看来这像是一个错误!或者我做错了什么?是否有解决方法(期望编写一些将路径转换为字符串的自定义序列化程序)java.lang.StackOverflowErroratcom.google.gson.internal.$Gson$Types.resolve($Gson$Types

java - 如何知道Netty ByteBuf 中没有数据可读?

我是Netty的新手。文件传输有一个问题让我困惑了好几天。我想从客户端向服务器发送图像文件。下面的代码是可执行的。但是只有我强行关闭服务器才能正常打开接收到的图片文件。否则,它会显示“您似乎没有查看此文件的权限。请检查权限并重试”。所以我想在ByteBuf中没有数据时使用ByteBuf.isReadable()关闭fileoutputstream,但是ServerHandler中的方法channelRead中的elseblock永远无法到达。这是没用的。此外,如果发送文本文件,当服务器alive时,它可以正常打开。我不想每次传输后都关闭服务器。请给我一些建议来解决它。这是FileCli

java - Scala/Java 中的 NIO 问题是什么

在网上搜索jvm并发性时,我发现了有关搜索Scala/Java的非阻塞IO库的问题。问题是什么?如果我想发送一些东西到文件/套接字,我可以启动单独的线程来完成这项工作。我知道使用基于事件的线程可能会出现问题-因为整个系统可能会被阻塞。但它是否引用了JVM/Scala?已添加:如果我错了请纠正我:我认为当你需要以异步方式调用一些IO函数时,它需要进入单独的进程或系统(重)线程。我对吗?所以-所有关于用通用语言解决此类问题的问题都涉及创建和管理单独的进程或线程。因此,该语言的唯一便利是创建一些线程池,这些线程池将异步分配给IO操作。所以我的假设是。句子:LanguageXisbettert

java - Netty - 如何在同一管道中的处理程序之间传递信息

我想创建一个处理程序管道,例如:publicChannelPipelinegetPipeline()throwsException{returnChannels.pipeline(newObjectEncoder(),newObjectDecoder(),newAuthenticationServerHandler(),newBusinessLogicServerHandler());}这里的关键是我希望AuthenticationServerHandler能够将登录信息传递给BusinessLogicServerHandler。我知道您可以使用Attachment,但是它只存储该处理