当前位置: 首页 > news >正文

吴堡网站建设费用网页设计课程期末总结

吴堡网站建设费用,网页设计课程期末总结,青岛app开发公司前十名,成都定制网站建设地址深入理解BIO与NIO BIO BIO 为 Blocked-IO#xff08;阻塞 IO#xff09;#xff0c;在 JDK1.4 之前建立网络连接时#xff0c;只能使用 BIO 使用 BIO 时#xff0c;服务端会对客户端的每个请求都建立一个线程进行处理#xff0c;客户端向服务端发送请求后#xff0c;…深入理解BIO与NIO BIO BIO 为 Blocked-IO阻塞 IO在 JDK1.4 之前建立网络连接时只能使用 BIO 使用 BIO 时服务端会对客户端的每个请求都建立一个线程进行处理客户端向服务端发送请求后先咨询服务端是否有线程响应如果没有就会等待或者被拒绝 BIO 基本使用代码 服务端 public class TCPServer {public static void main(String[] args) throws Exception {// 1.创建ServerSocket对象System.out.println(服务端 启动....);System.out.println(初始化端口 7777 );ServerSocket ss new ServerSocket(7777); //端口号while (true) {// 2.监听客户端Socket s ss.accept(); //阻塞// 3.从连接中取出输入流来接收消息InputStream is s.getInputStream(); //阻塞byte[] b new byte[10];is.read(b);String clientIP s.getInetAddress().getHostAddress();System.out.println(clientIP 说: new String(b).trim());// 4.从连接中取出输出流并回话OutputStream os s.getOutputStream();os.write(服务端回复.getBytes());// 5.关闭s.close();}} }客户端 public class TCPClient {public static void main(String[] args) throws Exception {while (true) {// 1.创建Socket对象Socket s new Socket(127.0.0.1, 7777);// 2.从连接中取出输出流并发消息OutputStream os s.getOutputStream();System.out.println(请输入:);Scanner sc new Scanner(System.in);String msg sc.nextLine();os.write(msg.getBytes());// 3.从连接中取出输入流并接收回话InputStream is s.getInputStream(); //阻塞byte[] b new byte[20];is.read(b);System.out.println(客户端发送消息: new String(b).trim());// 4.关闭s.close();}} }BIO 缺点 Server 端会为客户端的每一个连接请求都创建一个新的线程进行处理如果客户端连接请求数量太多则会创建大量线程 NIO 从 JDK1.4 开始Java 提供了一系列改进的输入/输出的新特性被统称为 NIO(即 New IO)NIO 弥补了 BIO 的不足在服务端不需要为客户端大量的请求而建立大量的处理线程只需要用很少的线程就可以处理很多客户端请求 NIO 和 BIO 有着相同的目的和作用但是它们的实现方式完全不同 BIO 以流的方式处理数据而 NIO 以块的方式处理数据块 IO 的效率比流 IO 高很多。NIO 是非阻塞式的这一点跟 BIO 也很不相同使用它可以提供非阻塞式的高伸缩性网络。 NIO 有三大核心部分 Channel通道Buffer缓冲区Selector选择器 使用 NIO 时数据是基于 Channel 和 Buffer 进行操作的数据从 Channel 被读取到 Buffer 或者相反Selector 用于监听多个 Channel 通道的事件连接事件、读写事件通过 Selector 就可以实现单个线程来监听多个客户端通道 NIO 中的 Channel 用来建立到目标的一个连接在 BIO 中流是单向的例如 FileInputStream 只能进行读取操作而在 NIO 中 Channel 是双向的既可以读也可以写 NIO 工作流程图如下Server 端通过单线程来监听多个客户端 Channel 通道中的事件并进行处理 NIO 使用示例 服务端 public class NIOServer {public static void main(String[] args) throws Exception {// 1. 开启一个ServerSocketChannel通道ServerSocketChannel serverSocketChannel ServerSocketChannel.open();// 2. 开启一个Selector选择器Selector selector Selector.open();// 3. 绑定端口号8888System.out.println(服务端 启动....);System.out.println(初始化端口 8888 );serverSocketChannel.bind(new InetSocketAddress(8888));// 4. 配置非阻塞方式serverSocketChannel.configureBlocking(false);// 5. Selector选择器注册ServerSocketChannel通道绑定连接操作serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);// 6. 循环执行监听连接事件及读取数据操作while (true) {// 6.1 监控客户端连接selecto.select()方法返回的是客户端的通道数如果为0则说明没有客户端连接。if (selector.select(2000) 0) {System.out.println(服务端等待客户端连接中~);continue;}// 6.2 得到SelectionKey,判断通道里的事件IteratorSelectionKey keyIterator selector.selectedKeys().iterator();// 遍历所有SelectionKeywhile (keyIterator.hasNext()) {SelectionKey key keyIterator.next();// 客户端连接请求事件if (key.isAcceptable()) {System.out.println(服务端处理客户端连接事件OP_ACCEPT);SocketChannel socketChannel serverSocketChannel.accept();socketChannel.configureBlocking(false);// 服务端建立与客户端之间的连接通道 SocketChannel并且将该通道注册到 Selector 中监听该通道的读事件socketChannel.register(selector, SelectionKey.OP_READ, ByteBuffer.allocate(1024));}// 读取客户端数据事件if (key.isReadable()) {// 数据在通道中先拿到通道SocketChannel channel (SocketChannel) key.channel();// 取到一个缓冲区nio读写数据都是基于缓冲区。ByteBuffer buffer (ByteBuffer) key.attachment();// 从通道中将客户端发来的数据读到缓冲区channel.read(buffer);System.out.println(客户端数据长度 buffer.array().length);System.out.println(客户端发来数据 new String(buffer.array()));}// 6.3 手动从集合中移除当前key,防止重复处理keyIterator.remove();}}} }客户端 public class NIOClient {public static void main(String[] args) throws Exception {// 1. 得到一个网络通道SocketChannel channel SocketChannel.open();// 2. 设置非阻塞方式channel.configureBlocking(false);// 3. 提供服务器端的IP地址和端口号InetSocketAddress address new InetSocketAddress(127.0.0.1, 8888);// 4. 连接服务器端如果用connect()方法连接服务器不成功则用finishConnect()方法进行连接if (!channel.connect(address)) {// 因为接需要花时间所以用while一直去尝试连接。在连接服务端时还可以做别的事体现非阻塞。while (!channel.finishConnect()) {// nio 作为非阻塞式的优势如果服务器没有响应不启动服务端)客户端不会阻塞最后会报错客户端尝试连接服务器连不上。System.out.println(客户端等待连接建立时执行其他任务~);}}// 5. 得到一个缓冲区并存入数据String msg 客户端发送消息hello;ByteBuffer writeBuf ByteBuffer.wrap(msg.getBytes());// 6. 发送数据channel.write(writeBuf);// 阻止客户端停止否则服务端也会停止。System.in.read();} }AIO JDK 7 引入了 Asynchronous IO即 AIO叫做异步不阻塞的 IO也可以叫做 NIO2 在进行 IO 编程中常用到两种模式Reactor模式 和 Proactor 模式 NIO采用 Reactor 模式当有事件触发时服务器端得到通知进行相应的处理AIO采用 Proactor 模式引入异步通道的概念简化了程序编写一个有效的请求才启动一个线程它的特点是先由操作系统完成后才通知服务端程序启动线程去处理一般适用于连接数较多且连接时间较长的应用
http://wiki.neutronadmin.com/news/420729/

相关文章:

  • 扁平化设计网站加工平台校准系统
  • 惠州网站建设服务搜索引擎优化包括哪些
  • 做软件常用的网站有哪些作文网高中
  • 谷歌镜像网站怎么做网页设计作品展示 简单
  • 很强大的网站运营方案1全flash网站源码
  • 凡客诚品的网站特色职业生涯规划大赛演讲稿5分钟
  • 主机屋网站空间的IPwordpress站群
  • 做网站设计能赚钱吗定制车需要多少钱
  • 无锡哪里有做网站的ps做兼职在什么网站可以找到
  • apmserv搭建多个网站商丘网红有哪几个
  • 浙江网站建设哪家权威企业管理系统软件有哪些
  • 广东外贸网站建设如何制作网站连接数据库
  • 万州集团网站建设渭南微信小程序网站建设
  • 公司管理系统网站怎样换网站logo
  • 中国做出口的网站平台购物网站国外
  • 常州网站建设专业的公司网站建设价格gxjzdrj
  • html搭建网站毕业纪念册设计制作图片
  • 大学生做网站赚钱公司网络安全管理制度和应急工作预案
  • 做淘宝门头的网站网站开发的常用流程
  • 重庆网站线上推广海淀高端企业网站建设
  • 调兵山网站商务网站建设论文
  • 个人网站如何建设紧急通知网页升级
  • 海兴做网站分割页面
  • 域名网站购买移动互联与网站开发
  • 怎样建设公司网站小程序做网站税率
  • 做二手的网站有哪些重庆城市建设档案馆网站
  • 做图片能去哪些网站吗重庆沙坪坝
  • 安阳网站建设设计seo搜索引擎的优化
  • 自己动手建立网站3黑科技引流推广神器
  • 凡客集团重庆seo整站优化系统