- 浏览: 224628 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 学习笔记 二 对象的访问
服务器端:
// 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(); } }
客户端:
//打开socket通道 SocketChannel socketChannel = SocketChannel.open(); //设置非阻塞方式 socketChannel.configureBlocking(false); //打开选择器 Selector selector = Selector.open(); //注册连接到服务器socket动作 socketChannel.register(selector, SelectionKey.OP_CONNECT); //连接 socketChannel.connect( new InetSocketAddress("localhost",9988)); Set<SelectionKey> selectkeySets; SelectionKey selectionKey; Iterator<SelectionKey> iterator; //与服务器通信通道 SocketChannel clientChannel ; while(true){ //选择一组建,其相应的通道已为I/O操作准备就绪 //此方法执行处于阻塞模式的选择操作 selector.select(TIME_OUT); //返回此选择器的已选择键集。 selectkeySets = selector.selectedKeys(); iterator = selectkeySets.iterator(); while(iterator.hasNext()){ selectionKey = iterator.next(); if (selectionKey.isConnectable()) { clientChannel = (SocketChannel)selectionKey.channel(); // 判断此通道上是否正在进行连接操作。 // 完成套接字通道的连接过程。 if (clientChannel.isConnectionPending()) {//判断此通道上是否正在进行连接操作 clientChannel.finishConnect(); //完成套接字通道的连接过程 } clientChannel.register(selector, SelectionKey.OP_WRITE); }else if (selectionKey.isReadable()) { clientChannel = (SocketChannel)selectionKey.channel(); //将缓冲区清空 receiveBuffer.clear(); //读取服务器发送来的数据库到缓冲区 count = clientChannel.read(receiveBuffer);//count 读取到的字节数 if (count > 0) { clientChannel.register(selector, SelectionKey.OP_WRITE); } }else if (selectionKey.isWritable()) { sendBuffer.clear(); clientChannel = (SocketChannel)selectionKey.channel(); clientChannel.write(sendBuffer); System.out.println("客户端向服务器发送数据:"+sendText); clientChannel.register(selector, SelectionKey.OP_READ); } } }
发表评论
-
[Java性能剖析]远程调试配置
2014-07-10 10:48 808一、服务器操作如下: 找到文件:apache-tomcat-5 ... -
[jdk工具命令]Java SE 文档
2014-07-10 10:43 778oracle java se documentation j ... -
[jdk命令工具]jconsole远程项目监控
2014-07-10 10:37 789入口:catalina.sh JAVA_OPTS=&quo ... -
[jvm参数]JVM简单配置
2014-07-10 10:35 1224-Xms256m -Xmx512M -XX:MaxPermSi ... -
struts2 高危漏洞修复
2013-07-23 10:30 11891. /** * 过滤器 */ ... -
转:调查服务器响应时间的利器 tcprstat
2012-11-16 13:50 1486http://rdc.taobao.com/blog/cs/? ... -
跟我学Spring3 学习笔记七 初始化与销毁
2012-10-18 16:45 2094最后 遗留一个问题, ... -
跟我学Spring3 学习笔记六 注入
2012-10-18 14:31 2232跟我学Spring3 学习笔 ... -
动态生成class
2012-10-16 11:17 1368ASM 进行动态生成class import org.obj ... -
FtpUtil ftp工具类 过滤文件名
2012-10-10 16:25 6946工具类: import java.io.Buff ... -
java 高性能网络编程 mina
2012-09-28 10:52 1691服务器端: // 创建一个非阻塞的server端so ... -
代理 下载网页,挖掘数据
2012-09-25 13:51 899URL url = new URL("http:// ... -
java nio 编程学习 一
2012-09-21 16:08 1179Java.nio中的主要类ServerSocketChanne ... -
MongoDB 实战笔记 四
2012-09-20 14:12 1146import java.net.UnknownHostExce ... -
Json 添加元素拼接JSON字符串(转)
2012-09-20 13:55 7055package com.util; import jav ... -
MongoDB 实战笔记 三
2012-09-20 13:37 2480导出mongoexport -d m ... -
MongoDB 实战笔记 二
2012-09-20 11:45 938MongoDB 实战笔记 count 查询记录 ... -
MongoDB 实战笔记 一
2012-09-20 11:30 1181MongoDB 实战笔记 来建立一个 test 的集 ... -
Struts 学习笔记 二
2012-09-17 16:56 876login.jsp 登陆页面 <html:form ac ... -
Struts 学习笔记 一
2012-09-14 15:36 1148struts 1.2 涉及到的包: commons-b ...
相关推荐
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而高效的网络编程则直接关系到系统的性能...在实际项目中,结合多线程、线程池和适当的并发控制策略,可以更好地发挥IO和NIO的优势,构建出高性能的网络服务。
全面理解 Java 网络编程 - BIO、NIO、AIO 本课程旨在帮助学生全面理解 Java 网络编程中的 BIO、NIO、AIO 三剑客,掌握 RPC 编程的基础知识,并结合实战项目巩固所学。 一、网络编程三剑客 - BIO、NIO、AIO BIO...
Netty是一个高性能、异步事件驱动的网络应用框架,专为Java设计,用于快速开发可维护的高性能协议服务器和客户端。Netty吸收了NIO的优点,并且提供了一套更加高级和灵活的API,使得开发者能够更容易地编写网络应用。...
### Java网络编程NIO视频教程知识点汇总 #### 1. Java NIO-课程简介 - **主要内容**:简述Java NIO(New IO)的概念及其与传统IO的区别。 - **学习目标**:理解NIO的基本原理及应用场景。 #### 2. Java NIO-概述 -...
NIO提供了一种高效处理IO的方式,而Mina和Netty又在此基础上提供了更加简洁和高效的网络编程模型,使得开发者能够轻松地构建出高性能的网络应用。随着网络应用的持续发展,这些技术的应用范围会越来越广泛,对于Java...
此外,非阻塞I/O(NIO)的引入为高性能网络应用提供了可能,如Selector和Channel的概念。 3. **多线程与并发**:在网络编程中,多线程和并发处理是必不可少的,书中会讲解如何在Java中管理线程,以及如何处理并发...
### Java NIO网络编程核心知识点解析 #### 非阻塞式Socket通信:Java NIO的革命性突破 从JDK 1.4版本开始,Java引入了NIO(Non-blocking I/O)API,这标志着Java网络编程的一个重大转折点。传统上,基于阻塞I/O的...
理解并掌握这些内容对于编写高性能的网络服务至关重要。 除了以上章节,书中还涵盖了套接字编程、服务器Socket、网络套接字API、URL和URLConnection类,以及高级主题如NIO(非阻塞I/O)和异步I/O。这些内容详细阐述...
《Java网络编程(第4版)》是一本深入探讨Java平台上的网络编程技术的专业书籍,适合想要提升Java通讯技术的学者阅读。此书全面覆盖了Java网络编程的基础和高级概念,帮助开发者理解如何利用Java语言构建高效、可靠的...
最后,网络性能优化是不可忽视的部分,如使用NIO(非阻塞I/O)替代传统的BIO(阻塞I/O),可以显著提升高并发场景下的性能。Java NIO通过Selector和Channel提供了一种高效的方式处理多个连接。 总的来说,Java网络...
Java IO、NIO以及NIO.2是Java...Java NIO则适合于需要高吞吐量的应用,以及对I/O事件响应式编程的场合;NIO.2则适合需要更强大的文件系统操作能力和异步I/O的应用。开发人员应根据应用需求选择最合适的I/O模型来实现。
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了如何才能充分利用新的 I/O ...
Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 ...这个"网络与nio"的压缩包文件很可能包含了服务器端和客户端的完整代码示例,可以帮助我们深入理解并实践Java NIO在网络编程中的应用。
7. **NIO (Non-blocking I/O)**: NIO是Java 1.4引入的新特性,提供了选择器(Selector)、通道(Channel)和缓冲区(Buffer)等概念,提高了高并发场景下的性能。 8. **Java网络类库**: 如InetAddress用于处理IP...
此外,Java网络高级编程还包括了NIO(非阻塞I/O)和NIO.2(New I/O API)。NIO允许程序以非阻塞方式处理多个输入/输出流,极大地提高了服务器端的并发性能。NIO.2在Java 7中引入,进一步完善了异步I/O的功能,如文件...
- **NIO(非阻塞I/O)**:Java的NIO库提供了更高效的网络编程模型,适用于高并发场景。 - **异步I/O(AIO)**:Java NIO.2引入了异步I/O,允许非阻塞读写操作。 通过阅读《Java网络编程》第三版,开发者可以系统...
Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。以下是对这些核心概念的...