Tag: netty

为什么JDK NIO使用这么多的anon_inode文件描述符?

我正在使用Sun的JDK 1.6.0_26和NIO(使用Netty),在lsof中我看到数百个文件描述符是anon_inode : $ lsof -np 11225 | fgrep -w anon_inode java 11225 nobody 57u 0000 0,9 0 1386 anon_inode java 11225 nobody 61u 0000 0,9 0 1386 anon_inode java 11225 nobody 65u 0000 0,9 0 1386 anon_inode java 11225 nobody 69u 0000 0,9 0 1386 anon_inode java 11225 nobody 73u 0000 0,9 0 1386 […]

Java中的SocketIO Client,如何实现与netty-socketio Server一起工作?

对于大学的实践课程,我必须用Java编写一个带有客户端/服务器基础结构的小游戏。 我需要使用Websockets进行通信,其他学生的解决方案必须与我的兼容,为服务器端选择了Netty SocketIO Server( https://github.com/mrniko/netty-socketio/tree/master/src )。 我已经知道如何设置服务器: Configuration config = new Configuration(); config.setPort(1234); config.setHostname(“localhost”); server = new SocketIOServer(config); server.addConnectListener( (client) -> { System.out.println(“Client has Connected!”); }); server.addEventListener(“MESSAGE”, String.class, (client, message, ackRequest) -> { System.out.println(“Client said: ” + message); }); server.start(); 现在请你解释一下,客户端代码应该是什么样的,以及我应该使用SocketIOClient(Netty只带来接口)的实现? 如果你能告诉我产生输出的代码会很棒 客户已连接! 客户说:你想要的任何消息:) 我真的被困在这里,已经在玩这样的实现https://github.com/socketio/socket.io-client-java但仍然无法弄清楚如何构建客户端并连接到我的服务器。 谢谢你的帮助。 费利克斯

netty 4.x中ServerBootstrap.option()和ServerBootstrap.childOption()之间有什么区别

根据4.0中的文档New和值得注意的 ,netty4提供了一个新的bootstrap API,doc提供了以下代码示例: public static void main(String[] args) throws Exception { // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 100) .localAddress(8080) .childOption(ChannelOption.TCP_NODELAY, true) .childHandler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(handler1, handler2, …); } […]

如何知道Netty ByteBuf中是否没有可读取的数据?

我是Netty的新手。 文件传输存在一个问题让我困惑了好几天。 我想将图像文件从客户端发送到服务器。 以下代码是可执行的。 但只有我强行关闭服务器才能正常打开收到的图像文件。 否则,它显示“ 看起来您没有权限查看此文件。请检查权限并重试 ”。 因此,当ByteBuf中没有数据使用ByteBuf.isReadable()时 ,我想关闭fileoutputstream,但ServerHandler中方法channelRead中的else块永远不会到达。 这毫无用处。 此外,如果发送文本文件,它可以在服务器处于活动状态时正常打开。 我不希望每次转移后都关闭服务器 。 请给我一些解决方案的建议。 这是FileClientHandler public class FileClientHandler extends ChannelInboundHandlerAdapter { private int readLength = 8; @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { sendFile(ctx.channel()); } private void sendFile(Channel channel) throws IOException { File file = new File(“C:\\Users\\xxx\\Desktop\\1.png”); FileInputStream fis = new FileInputStream(file); BufferedInputStream […]

结合Netty和Spring MVC

如何在Spring MVC中配置Netty。 何时何地应该启动Netty tcp服务器? 一旦Spring开始,我应该初始化netty吗? 有人可以给我看一个例子,比如Spring配置xml文件或eles吗? 谢谢!

不同的Netty版本及其用途

我现在使用Netty一段时间了,永远无法解决这个问题。 可以下载四个不同的版本。 其中三个正在积极开发。 3.X 4.0.x版 4.1.x版 5.x的 据我所知,3.x适用于JRE 1.5,JRE的其他所有内容都大于此。 我使用的是4.0.28,因为它是稳定版和推荐版。 但是其他版本的差异或目标到底是什么? 我在他们的网站上找不到任何关于此的信息。 编辑:我看到接近投票,所以我想澄清一下:我不是在寻找那些列出版本代码中所有差异的人。 但4.1.x和5.x版本必须有某种目标或目的。

如何在Netty客户端中使用Socks4 / 5代理处理程序(4.1)

我需要在Netty客户端配置socks代理(通过socks4或5个代理请求不同的站点)。 从免费袜子列表(如www.socks-proxy.net, http ://sockslist.net/等)尝试了很多代理,但没有运气: @Test public void testProxy() throws Exception { final String ua = “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36”; final String host = “www.main.de”; final int port = 80; Bootstrap b = new Bootstrap(); b.group(new NioEventLoopGroup()) .channel(NioSocketChannel.class) .handler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline […]

为什么Netty只给我768字节的UDP消息

我已将“receiveBufferSize”选项设置为1024,但由于某种原因,我仍然只在messageReceived中获得768个字节。 数据标题表示正在发送的数据大小为1004。 以下是服务器的初始化代码: public static void main(String[] args) throws Exception { ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory()); // Options for a new channel b.setOption(“receiveBufferSize”, 1024); System.out.println(b.getOptions()); b.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { return Channels.pipeline( new MyUDPPacketDecoder(), new StdOutPrintHandler()); } }); b.bind(new InetSocketAddress(myPort)); }

Haproxy + netty:防止连接重置exception的方法?

我们在netty-3.6运行的后端使用haproxy。 我们正在处理大量的连接,其中一些可能是长期存在的。 现在的问题是,当haproxy关闭连接以实现重新平衡时,它会通过发送tcp-RST来实现。 当netty使用的sun.nio.ch-class看到这个时,它会抛出一个IOException:“Connection by peer”。 跟踪: sun.nio.ch.FileDispatcherImpl.read0(Native Method):1 in “” sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39):1 in “” sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:225):1 in “” sun.nio.ch.IOUtil.read(IOUtil.java:193):1 in “” sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:375):1 in “” org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90):1 in “” org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178):1 in “” java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145):1 in “” java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615):1 in “” java.lang.Thread.run(Thread.java:724):1 in “” 这会导致每个配置出现以下问题: 选项http-pretend-keepalive 这是最好的(因为haproxy似乎关闭了大多数与FIN而不是RST的连接),但仍然每个服务器每秒产生大约3个exception。 此外,它有效地进行了网络负载平衡,因为一些传入连接非常长,并且具有非常高的吞吐量:使用pretend-keepalive,它们永远不会被haproxy重新平衡到另一台服务器。 选项http-keep-alive 由于我们的后端期望保持活动连接真正保持活动(因此不会自行关闭它们),因此此设置相当于每个连接最终会导致一个exception,从而导致我们的服务器崩溃。 我们尝试添加prefer-last-server,但它没有多大帮助。 选项http-server-close […]

Netty增加ChannelBuffer大小

您好我有一个Netty Server,其处理程序应该接受字符串。 它似乎只接收最多1024个字节的内容。 如何增加缓冲区大小。 我已经试过了 bootstrap.setOption(“child.sendBufferSize”, 1048576); bootstrap.setOption(“child.receiveBufferSize”, 1048576); 没有成功。 处理程序如下 public class TestHandler extends SimpleChannelHandler { @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { ChannelBuffer buf = (ChannelBuffer) e.getMessage(); String response = “”; if (buf.readable()) { response = buf.toString(CharsetUtil.UTF_8); System.out.println(“CONTENT: ” + response); } System.out.println(response); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { […]