java nio 如何建立和管理多个channel

转载 2015年07月07日 17:14:12

1、建立多个监听socket,每个监听独立处理,互不干扰

ServerSocketChannel sc1 = ServerSocketChannel.open();

sc1.configureBlocking(false);

sc1.socket().bind(new InetSocketAddress());

SelectionKey skey1 = sc1.register(selector, OP_ACCEPT);

skey1.attach(new ServerHandler(selector, sc1));

ServerSocketChannel sc2 = ServerSocketChannel.open();

sc2.configureBlocking(false);

sc2.socket().bind(new InetSocketAddress());

SelectionKey skey2 = sc2.register(selector, OP_ACCEPT);

skey2.attach(new SHandler(selector, sc2));

上述代码中attach函数最关键了,它实现了一个key和一个对象的绑定,这样当我们每次使用selector函数发现有连接进入时,我们可以使用下面语句:

Handler handler = (Handler) key.attachment();获取与当前key相关的对象,从而处理与当前key绑定的监听socket,这样我们就可以对不同的监听socket做不同的操作。


2、处理多个连接,每个连接执行不同的操作,互不干扰

与上面处理监听相同,SocketChannel在register的时候,使用attach方法,将key和一个对象绑定,当此key有可读或可写的事件时,使用key.attachment()方法即可用获取到与此key对应的处理对象。 


3、while循环如何处理key

while(true) {

for(;keys;) {

Handler h = (Handler)key.attachment();

        h.doFunc();

}

}

上面attachment函数即可获取与当前key绑定的处理对象,这样每个key即每个channel就可以分别处理,分别做不同的事情。

Java - NIO之Channel(FileChannel)

Java NIO的类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buf...
  • u013379717
  • u013379717
  • 2014年05月25日 23:47
  • 3717

《Java NIO》:Channel and Buffer (通道和缓冲区)

《Java NIO》:Channel and Buffer (通道和缓冲区)从今天开始,自己将会了解下Java NIO的相关知识,以及会看下相关的类库源码。和往常自己学习新知识之前,自己都会阅读网...
  • u010412719
  • u010412719
  • 2016年10月08日 19:46
  • 831

Java NIO之多个Selector的实现

欢迎大家讨论,我也是接触时间不长,有问题欢迎大家指正。欢迎转载,转载请注明出处 楔子 最近在研究JAVA NIO的相关知识,发现网上多是三种类型的研究文章,一是单Reactor单Selecto...
  • jjzhk
  • jjzhk
  • 2014年09月26日 07:15
  • 14786

通俗编程——白话NIO之Channel

Channel简介在标准的IO当中,都是基于字节流/字符流进行操作的,而在NIO中则是是基于Channel和Buffer进行操作,其中的Channel的虽然模拟了流的概念,实则大不相同。...
  • dd864140130
  • dd864140130
  • 2015年12月16日 14:42
  • 2847

java nio SocketChannel 服务器端与多客户端 信息交互(聊天功能)

服务端代码:
  • tang9140
  • tang9140
  • 2014年09月04日 15:13
  • 4681

Java NIO笔记(第三弹:Java NIO Chanel的四种实现详解)

FileChannelFileChannel是什么FileChannel是一个连接到文件的通道,可以通过文件通道读写文件。它无法设置为非阻塞模式,总是运行在阻塞模式下。打开FileChannel我们可...
  • lianjiww
  • lianjiww
  • 2016年12月10日 21:51
  • 1282

Java NIO通道Channel的原理与获取

通道Channel:由java.nio.channels包定义。Channel表示IO源与目标打开的连接。Channel类似于传统的"流",只不过Channel本身不能直接访问数据,Channel只能...
  • u013063153
  • u013063153
  • 2017年07月31日 23:53
  • 482

NIO 多线程处理异步队列

本文使用java的NIO简单实现server-client模式,处理异步队列。缓存队列类
  • Ant_Shen
  • Ant_Shen
  • 2017年04月22日 20:59
  • 399

Java NIO原理图文分析及代码实现

一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数...
  • zmx729618
  • zmx729618
  • 2016年07月08日 09:35
  • 2891

java nio原理和它的优点

要想讲清楚nio的原理和它的优点得先清楚Java应用程序的文件读写原理和虚拟内存的原理。Java文件读取原理可参见如下图: 当应用程序需要读取文件的时候,内核首先通过DMA技术将文件内容从磁...
  • u012684933
  • u012684933
  • 2015年11月06日 15:20
  • 6811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java nio 如何建立和管理多个channel
举报原因:
原因补充:

(最多只允许输入30个字)