Tag: netty

使用Netty.io将文件从服务器发送到客户端

我正在尝试从服务器向客户端发送文件,即从服务器请求的客户端。 客户端在FileRequestProtocol中对文件进行FileRequestProtocol ,将其发送到服务器,服务器将文件大小添加到文件FileRequestProtocol并将其返回给客户端。 客户端向其管道添加具有正确文件大小的新FileChunkReqWriteHandler 。 服务器使用上下文和所需文件创建一个新的ChunkedFileServerHandler并尝试发送它,但FileChunkReqWriteHandler永远不会从通道读取字节。 我在这做错了什么? 日志 INFO ProtocolHeadHandler:48 – Client send ProtocolHead [version=1, jobType=FILEREQUEST] INFO ProtocolHeadServerHandler:36 – Server receive ProtocolHead [version=1, jobType=FILEREQUEST] INFO ProtocolHeadHandler:57 – Client ProtocolHead equals, Send Protocol FileRequestProtocol [filePath=test.jpg, fileSize=0] INFO FileRequestServerHandler:42 – Server new FileRequest FileRequestProtocol [filePath=test.jpg, fileSize=0] INFO FileRequestHandler:41 – Client receives FileRequestProtocol [filePath=test.jpg, fileSize=174878] INFO ChunkedFileServerHandler:39 – […]

Java,Netty,TCP和UDP连接集成:没有可用于UDP连接的缓冲区空间

我有使用TCP和UDP协议的应用程序。 主要假设是客户端通过TCP协议连接到服务器,并且在建立连接时,正在发送UDP数据报。 我必须支持两种连接服务器的方案: – 客户端在服务器运行时连接 – 客户端在服务器关闭时连接并重试连接直到服务器再次启动 对于第一个场景,一切都很好:我连接两个工作。 问题出在第二种情况。 当客户端尝试几次通过TCP连接并最终连接时,UDP连接函数会抛出exception: java.net.SocketException: No buffer space available (maximum connections reached?): bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:344) at sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:684) at sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:91) at io.netty.channel.socket.nio.NioDatagramChannel.doBind(NioDatagramChannel.java:192) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:484) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1080) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:430) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:415) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:903) at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:197) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:350) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) at java.lang.Thread.run(Thread.java:722) 当我重新启动客户端应用程序而不对服务器做任何事情时,客户端将连接任何问题 […]

使用Netty的Servlet API实现

有没有人在Netty之上构建了一个Servlet API实现? 我很想建立自己的,因为我无法谷歌实施。 http://www.jboss.org/netty/community#nabble-td4752485 http://markmail.org/message/4qmvuaacxqzevqhc 基本上我正在寻求足够的支持让jersey工作(希望jersey没有做任何线程本地的东西)。

在许多客户端连接的情况下,Netty线程模型如何工作?

我打算在即将开展的项目中使用Netty。 该项目将充当客户端和服务器。 特别是它将建立和维护与各种服务器的许多连接,同时为其自己的客户提供服务。 现在, NioServerSocketChannelFactory的文档公平地指定了服务器端的线程模型 – 每个绑定的侦听端口在整个过程中都需要专用的boss线程,而连接的客户端将在工作线程上以非阻塞的方式处理。 具体来说,一个工作线程将能够处理多个连接的客户端。 但是, NioClientSocketChannelFactory的文档不太具体。 这似乎也利用了boss和worker线程。 但是,文档说明: 一个NioClientSocketChannelFactory有一个boss线程。 它根据请求进行连接尝试。 一旦连接尝试成功,boss线程就将连接的Channel传递给NioClientSocketChannelFactory管理的其中一个工作线程。 工作线程似乎也以与服务器案例相同的方式运行。 我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的boss线程? 如果我建立数百个或数千个此类连接,这将如何扩展? 作为旁注。 重新使用单个Executor(缓存线程池)作为ChannelFactory的bossExecutor和workerExecutor是否有任何不良副作用? 那么在不同的客户端和/或服务器ChannelFactory实例之间重新使用呢? 这里有一些讨论 ,但我没有找到足够具体的答案。 任何人都可以详细说明这个吗?

Netty没有写

当尝试使用netty编写时,写入的数据永远不会在远程端结束,并通过Wireshark确认。 我努力了: //Directly using writeAndFlush channel.writeAndFlush(new Packet()); //Manually flushing channel.write(new Packet()); channel.flush(); // Even sending bytes won’t work: channel.writeAndFlush(new byte[]{1,2,3}); 当我将它包装在try{…}catch(Throwable e){e.printStackTrace();}时,没有exceptiontry{…}catch(Throwable e){e.printStackTrace();} 我该怎么做来调试这个问题?

如何解决“在类路径中发现Netty的本地epoll传输,但epoll不可用。 使用NIO代替“警告?

我正在使用Cassandra,并且在启动期间,Netty使用堆栈跟踪打印警告: 在类路径中找到Netty的本地epoll传输,但epoll不可用。 改用NIO。“ 该应用程序正常工作,但有没有办法解决警告? 这是完整的堆栈跟踪: 16:29:46 WARN com.datastax.driver.core.NettyUtil – Found Netty’s native epoll transport in the classpath, but epoll is not available. Using NIO instead. java.lang.UnsatisfiedLinkError: no netty-transport-native-epoll in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:168) at io.netty.channel.epoll.Native.(Native.java:49) at io.netty.channel.epoll.Epoll.(Epoll.java:30) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.datastax.driver.core.NettyUtil.(NettyUtil.java:68) at com.datastax.driver.core.NettyOptions.eventLoopGroup(NettyOptions.java:101) at com.datastax.driver.core.Connection$Factory.(Connection.java:709) at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1386) […]

无法在Java 9中为自动生成的模块名称派生模块描述符?

我的项目依赖于Netty Epoll传输。 这是依赖: io.netty netty-transport-native-epoll ${netty.version} ${epoll.os} 此依赖项的自动生成的模块名称为: netty.transport.native.epoll 由于native 9中保留了native关键字,因此无法将此模块作为依赖项添加到我的项目中: module core { requires netty.transport.native.epoll; } 由于: module not found: netty.transport. 此外,jar工具–describe-module报告以下内容: 无法导出模块描述符:netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86_64.jar netty.transport.native.epoll:无效的模块名称:’native’不是Java标识符 有没有解决方法? (当然,除了“发布正确的网络工件”)。 编辑 : 作为维护者的快速修复 – 您可以添加下一行来构建: netty.transport.epoll