- 浏览: 217991 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (163)
- c++ (30)
- JavaScript (30)
- java (61)
- jQuery (3)
- ACE (2)
- oracle (9)
- jni (0)
- android (2)
- shell (1)
- myeclipse (1)
- Hibernate (1)
- linux (2)
- sqlserver (2)
- windows (2)
- sql (2)
- php (2)
- css (1)
- 学习 (1)
- ExtJs (1)
- RSS (1)
- 报文 (1)
- 跟我学Spring3 (6)
- dos (1)
- server (1)
- nosql (4)
- mongodb (6)
- photoshop (1)
- WebService (2)
- 股票 (1)
- OpenGL (3)
- Spring3MVC (6)
- 生活 (1)
- struts2 (1)
- 云盘 (1)
- blog (1)
- nosql nodejs mongoose (1)
最新评论
-
sblig:
配置分片: mongo -port 27017config ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
sblig:
配置路由:mongs: 40000 40100 40200sc ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
fuanyu:
哥们,干得漂亮。。
struts2 高危漏洞修复 -
sblig:
配置列子如下
<?xml version="1 ...
跟我学Spring3 学习笔记一 -
sblig:
307622798 写道博主你好,最近在看你的js系列文章,发 ...
JavaScript 学习笔记 二 对象的访问
Java.nio中的主要类
ServerSocketChannel:ServerSocket的替代类.
SocketChannel:Socket的替代类
Selector:为ServerSocketChannel监控接受就绪事件,为SocketChannel监控连接就绪,读就绪和写就绪事件
SelectionKey:代表ServerSocketChannel及SocketChannel向Selector注册事件句柄
向SocketChannel和ServerSocketChannel注册事件:
SelectionKey key=serverSocketChannel.register(selector,op)
Op的可选值
对于ServerSocketChannel只有一个事件:
(1)SelectionKye.OP_ACCEPT:接受连接就绪事件,表示至少有了一个客户连接,服务器可以接受这个连接
SocketChannel可能发生3种事件
(1)SelectionKey.OP_CONNECT:连接就为事件,表示客户与服务器的连接已经成功
(2)SelectionKey.OP_WRITE/OP_READ:写的就绪事件,表示已经可以向输出流写数据了SocketChannel提供了接受和发送的方法
可以使用:read(ByteBuffer)write(ByteBuffer)写入写出
ServerSocketChannel类
方法:(PS继承过SelectableChannel类的方法)
(1)open()静态方法获取ServerSocketChannel对象.
(2)accept同ServerSocket,不过获取的是SocketChannel,根据是否阻塞返回null还是阻塞,值得注意的是accept返回的SocketChannel是阻塞模式的使用configureBlocking更改模式
(3)socket() 返回关联的ServerSocket
SocketChannel类
此类是Socket类的替代类
方法:(PS继承过SelectableChannel类的方法)
(1)open() open(SocketAddress)静态方法用来创建SocketChannel对象,第二个重写还会建立于远程服务器的连接.
(2)socket()返回关联的Socket对象
(3)isConnected()是否建立连接
(4)isConnectionPending判断是否正在进行远程连接
(5)connect() 建立远程连接() 根据是否阻塞而不同
(6)finishConnect() 视图完成远程连接
(7)read()读取数据(这个应该是接数据)
(8)write()写数据(这个是发送数据)
声明:
public static int PORT = 8888; ServerSocketChannel serverChannel; ServerSocket serverSocket; Selector selector;
初始化:
// 1. 分配一个 ServerSocketChannel 文件描述符 serverChannel = ServerSocketChannel.open(); // 2. 从 ServerSocketChannel里获取一个对于的 socket serverSocket = serverChannel.socket(); // 3. 生成一个 Selector selector = Selector.open(); // 4. 把 socket 绑定到端口上 serverSocket.bind(new InetSocketAddress(iport)); // 5. serverChannel 未非bolck serverChannel.configureBlocking(false); // 6. 通过Selector注册ServerSocketChannel: 只能注册 accept // 而SocketChannel可以注册CONNENCT,READ,WRITE ; register -> validOps // 在各个子类实现不同 serverChannel.register(selector, SelectionKey.OP_ACCEPT);
开启服务:
while (true) { try { // 获得IO准备就绪的channel数量 int n = selector.select(); // 没有channel准备就绪,继续执行 if (n == 0) { continue; } // 用一个iterator返回Selector的selectedkeys Iterator it = selector.selectedKeys().iterator(); // 处理每一个SelectionKey while (it.hasNext()) { SelectionKey key = (SelectionKey) it.next(); // 判断是否有新的连接到达 if (key.isAcceptable()) { // 返回SelectionKey的ServerSocketChannel ServerSocketChannel server = (ServerSocketChannel) key .channel(); System.out.println("有连接"); SocketChannel channel = server.accept(); registerChannel(selector, channel, SelectionKey.OP_READ); doWork(channel); } // 判断是否有数据在此channel里需要读取 if (key.isReadable()) { processData(key); } } // 删除 selectedkeys it.remove(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
发表评论
-
[Java性能剖析]远程调试配置
2014-07-10 10:48 742一、服务器操作如下: 找到文件:apache-tomcat-5 ... -
[jdk工具命令]Java SE 文档
2014-07-10 10:43 740oracle java se documentation j ... -
[jdk命令工具]jconsole远程项目监控
2014-07-10 10:37 736入口:catalina.sh JAVA_OPTS=&quo ... -
[jvm参数]JVM简单配置
2014-07-10 10:35 1184-Xms256m -Xmx512M -XX:MaxPermSi ... -
struts2 高危漏洞修复
2013-07-23 10:30 11151. /** * 过滤器 */ ... -
转:调查服务器响应时间的利器 tcprstat
2012-11-16 13:50 1445http://rdc.taobao.com/blog/cs/? ... -
跟我学Spring3 学习笔记七 初始化与销毁
2012-10-18 16:45 2042最后 遗留一个问题, ... -
跟我学Spring3 学习笔记六 注入
2012-10-18 14:31 2167跟我学Spring3 学习笔 ... -
动态生成class
2012-10-16 11:17 1320ASM 进行动态生成class import org.obj ... -
FtpUtil ftp工具类 过滤文件名
2012-10-10 16:25 6889工具类: import java.io.Buff ... -
java 高性能网络编程 NIO
2012-09-28 16:31 1465服务器端: // 1. 分配一个 Serve ... -
java 高性能网络编程 mina
2012-09-28 10:52 1642服务器端: // 创建一个非阻塞的server端so ... -
代理 下载网页,挖掘数据
2012-09-25 13:51 840URL url = new URL("http:// ... -
MongoDB 实战笔记 四
2012-09-20 14:12 1091import java.net.UnknownHostExce ... -
Json 添加元素拼接JSON字符串(转)
2012-09-20 13:55 7001package com.util; import jav ... -
MongoDB 实战笔记 三
2012-09-20 13:37 2410导出mongoexport -d m ... -
MongoDB 实战笔记 二
2012-09-20 11:45 890MongoDB 实战笔记 count 查询记录 ... -
MongoDB 实战笔记 一
2012-09-20 11:30 1139MongoDB 实战笔记 来建立一个 test 的集 ... -
Struts 学习笔记 二
2012-09-17 16:56 824login.jsp 登陆页面 <html:form ac ... -
Struts 学习笔记 一
2012-09-14 15:36 1109struts 1.2 涉及到的包: commons-b ...
相关推荐
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Java,NIO,教程 非堵塞IO编程
java nio编程 非阻塞模式的通信 电子书 带目录标签
05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 07-Java NIO-Channel-Socket通道-概述.mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-...
一站式学习Java网络编程 全面理解BIO:NIO:AIO1
基于java nio的服务器与客户端的开发指南
nio对于java程序员来说可能不是很好理解,但是对于C程序员来说,就是epoll的一个封装。 我本人是C程序员,对java比较感兴趣,发现java nio里面很多的东西都是对C原生api的封装,如epoll, mmap等 要是想学习 java ...
非常难得的,Java NIO 国外 PPT 课件(精华) 好不容易才从国找到的
java bio nio aio socket
java NIO,AIO编程.txt 网盘永久链接 为方便java nio aio 学习爱好者而上传
java nio 编程一个实例子.服务端程序
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
Java高级编程、内有Java IO NIO,Java+netty等框架技术详解。
java网络编程 nio-netty,想要学习netty的同学,这本书是非常好的资源。
Java NIO 网络编程初探 1. Java NIO Java 1.4 版本添加了一个新的IO API,称为NIO(New IO)。NIO拥有所有IO的功能,但是操作方法却完全不一样。NIO支持面向缓冲区的、基于通道的IO操作。能够更加高效的进行IO操作。...
[第4节] JavaNIO流-通道1.flv [第5节] Java NIO流-通道2.flv [第6节] Java NIO流-socket通道操作.flv [第7节] Java NIO流-文件通道操作.flv [第8节] Java NIO流-选择器 .flv [第9节] Java NIO流-选择器操作.flv...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了如何才能充分利用新的 I/O ...
JAVA NIO非阻塞线程编程