thr*_*thr 57 java sockets networking asynchronous
除了java.nio之外,java中有哪些async io(基于套接字)的选项?java.nio也使用backround中的线程(因为我认为.NET的async-socket-library确实如此,可能它已经被更改了)或者使用正确的select调用它是"真正的"async io吗?
JLR*_*JLR 45
Java的NIO包(从Java6开始)仅通过Selector提供对非阻塞I/O的支持.希望Java7能够附带NIO.2,其中包括异步I/O支持.今天,你最好的办法就是利用一个框架.ARMistice提到了Mina.这是其他一些.
现在,关于有关线程的问题,NIO选择器不会将线程用于非阻塞I/O. 在JDK6中,他们在Windows下使用select(),在新的Linux内核上使用epoll工具.对于异步I/O,线程细节取决于框架.
Wal*_*ski 16
JAVA 7到了,所以新答案是NIO.2和Future类.示例:
在服务器端:
final AsynchronousServerSocketChannel serverSocket=
AsynchronousServerSocketChannel.open().bind(new InetSocketAddress("127.0.0.1", 2587)); // Listening on port 2587 for client connection
Future<AsynchronousSocketChannel> future= serverSocket.accept();
final AsynchronousSocketChannel clientSocket= future.get(); // now it's blocking, useful: future.isDone() and .isCancelled()
//Do whatever you want ..
InputStream stream = Channels.newInputStream(clientSocket) (...)
Run Code Online (Sandbox Code Playgroud)
在客户端:
AsynchronousSocketChannel clientChannel = AsynchronousSocketChannel.open();
Future connected = localSocket.connect(ourServerSocketAddress);
// later: if(future.isDone())
connected.get();
//Send something
OutputStream os = Channels.newOutputStream(clientChannel );
os.write (...)
Run Code Online (Sandbox Code Playgroud)
更新: 如果你可以使用actor模型,那么AKKA TCP IO会更好.
Nuo*_*oji 15
关于libs的另一个建议是Naga(http://naga.googlecode.com).它有点像框架,更像是一个库.它试图看起来更像普通的Java套接字,如果这是你的一杯茶.与Grizzly,Mina和Netty相比,它很简约.
归档时间: |
|
查看次数: |
70696 次 |
最近记录: |