Tag: nio

高性能网络的Netty替代品有哪些?

我正在选择一个网络库来实现一个不能消耗任何微秒的客户端/服务器系统。 它将实现自己的协议来发送和接收消息。 我正在寻找一个好的NIO框架,这将允许我轻松开发服务器和客户端,而不必过多担心低级别的选择器细节。 每个人都建议我使用Netty,但在向团队提交框架之前,我想尝试2或3个其他选择。 我不太喜欢Netty的一件事是它如何使用自己的ByteBuf实现和引用计数来处理ByteBuffers。 有人可以分享你的想法和选择吗?

当io包中已有方法时,java nio包的确切用法是什么

我正在学习java nio包,我意识到文件已经提供了很多方法,nio.Files再次使用Path类提供这些方法。 就像我得到的那样。 我实际上没有得到nio包的实际用途。 我对这个软件包很新,所以可能我的问题是错的,但是一点帮助可以促使我进一步阅读。

调用select()时,Java节点在使用选择器注册通道时阻塞。 该怎么办?

我有一个基本问题。 SelectableChannel的寄存器方法为何以及如何阻止调用。 让我提供一个场景。 我在类Register中创建了一个Selector对象,如下所示。 private static Selector selector = Selector.open(); 我在同一类(寄存器)中也有一个方法用选择器注册通道。 public static SelectionKey registerChannel(SelectableChannel channel, int ops) throws IOException { channel.configureBlocking(false); return channel.register(selector, ops); } 还有另一个名为Request的类,它具有从通道,进程和调用方法中读取数据以注册通道的方法。 selectonKey = Register.register(socketChannel, SelectionKey.OP_READ); 在这一点上,线程被阻塞,没有提供它正在等待的线索。 我已经确认选择器已打开。 请帮助我了解如何解决此问题。 我可以释放任何锁吗? 任何输入将不胜感激。 添加到我所描述的内容中。 进一步的测试显示,如果从同一个线程调用Register.register方法,它可以注册但在此之后如果其他一些线程试图调用该方法,则线程不会继续前进。

使用NIO直接缓冲区时设置-XX:+ DisableExplicitGC的影响

我们正在构建一个具有积极性能SLA的Web应用程序,由于JVM因System.gc()调用而外出午餐,因此会定期违反这些SLA。 我们已经做了一些调试,并确定在所有情况下它都是调用System.gc()的内部应用服务器代码。 在app服务器启动或部署应用程序时会发生这种情况,我们并不关心。 但是,当应用程序启动并通过内部应用程序服务器调用NIO类时,也会定期触发System.gc()。 这是我们能够捕获此事件的堆栈跟踪: 3XMTHREADINFO “WebContainer : 25” J9VMThread:0x0000000006FC5D00, j9thread_t:0x00007F60E41753E0, java/lang/Thread:0x000000060B735590, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0xFE, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x1039, native priority:0x5, native policy:UNKNOWN) 3XMTHREADINFO2 (native stack address range from:0x00007F6067621000, to:0x00007F6067662000, size:0x41000) 3XMCPUTIME CPU usage total: 80.222215853 secs 3XMHEAPALLOC Heap bytes allocated since last GC cycle=1594568 (0x1854C8) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/System.gc(System.java:329) […]

为什么FileChannel.map会占用Integer.MAX_VALUE数据?

我在使用FileChannel.map时遇到exception Exception in thread “main” java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE at sun.nio.ch.FileChannelImpl.map(Unknown Source) at niotest.NioTest.readUsingNio(NioTest.java:38) at niotest.NioTest.main(NioTest.java:64) 快速查看OpenJdk实现显示FileChannelImpl中的方法map(..)将long类型的size作为输入。 但是在体内,它将它与Integer.MAX_VALUE进行比较,如果它大于那,则抛出错误。 为什么将long尺寸作为输入但是将其限制为最大integer长度? 有谁知道这个实现背后的具体原因? 还是某种虫子? 源URL – http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/nio/ch/FileChannelImpl.java 我在64位Windows-2k8上使用64位JRE运行此程序

Java – 使用nio的ReadObject

在传统的阻塞线程服务器中,我会做这样的事情 class ServerSideThread { ObjectInputStream in; ObjectOutputStream out; Engine engine; public ServerSideThread(Socket socket, Engine engine) { in = new ObjectInputStream(socket.getInputStream()); out = new ObjectOutputStream(socket.getOutputStream()); this.engine = engine; } public void sendMessage(Message m) { out.writeObject(m); } public void run() { while(true) { Message m = (Message)in.readObject(); engine.queueMessage(m,this); // give the engine a message with this as […]

如何在JDK7中重命名(不移动)文件?

我对JDK7中所有这些新的File I / O类感到困惑。 让我们说,我有一个Path并希望重命名该文件,它代表。 如何再次指定Path ,如何指定新名称? Path p = /* path to /home/me/file123 */; Path name = p.getName(); /* gives me file123 */ name.moveTo(/* what now? */); /* how to rename file123 to file456? */ 注意:为什么我需要JDK7 ? 处理符号链接 ! 问题是:我必须使用文件,在运行时知道名称和位置。 所以,我需要的是一种安全的方法(没有特殊的副作用)来创建一个新的名称 – 路径的一些旧名称路径。 Path newName(Path oldName, String newNameString){ /* magic */ }

使用Netty的Servlet API实现

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

使用自签名证书和SSLEngine(JSSE)的SSL握手

我的任务是实现一个可以在同一端口上处理SSL和非SSL消息的自定义/独立Java Web服务器。 我已经实现了一个NIO服务器,它非常适用于非SSL请求。 我对SSL片段感到非常兴奋,并且可以使用一些指导。 这是我到目前为止所做的。 为了区分SSL和非SSL消息,我检查入站请求的第一个字节以查看它是否是SSL / TLS消息。 例: byte a = read(buf); if (totalBytesRead==1 && (a>19 && a<25)){ parseTLS(buf); } 在parseTLS()方法中,我实例化一个SSLEngine,如下所示: java.security.KeyStore ks = java.security.KeyStore.getInstance(“JKS”); java.security.KeyStore ts = java.security.KeyStore.getInstance(“JKS”); ks.load(new java.io.FileInputStream(keyStoreFile), passphrase); ts.load(new java.io.FileInputStream(trustStoreFile), passphrase); KeyManagerFactory kmf = KeyManagerFactory.getInstance(“SunX509”); kmf.init(ks, passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance(“SunX509”); tmf.init(ts); SSLContext sslc = SSLContext.getInstance(“TLS”); sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); SSLEngine […]

Java.nio频道和TLS

如何使用TLS保护Java SocketChannel , ServerSocketChannel或甚至是DatagramChannel ? 我知道有一些框架( #1 #2 )可以做广告,但我想知道是否可以单独使用纯Java标准库来实现这一点。