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

网站开发公司凭证建设银行开通网银网站

网站开发公司凭证,建设银行开通网银网站,便宜的广州网站建设服务,wordpress花园破解小彬子一:IO基本介绍 Java共支持3种网络编程IO模式:BIO,NIO,AIO 0.Java对BIO、NIO、AIO的支持: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端…

一:IO基本介绍

Java共支持3种网络编程IO模式:BIO,NIO,AIO

0.Java对BIO、NIO、AIO的支持:

Java BIO同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
Java NIO同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
Java AIO(NIO.2)异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS(操作系统)先完成了再通知服务器应用去启动线程进行处理。
在这里插入图片描述

BIO三个重要部分:
Buffer 缓冲区
Channel 通道
Selector 多路复用器

1.BIO、NIO、AIO适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO方式使用于**连接数目多且连接比较长(重操作)**的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

二:业务代码浅析

在这里插入图片描述

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;public class NioSelector {public static void main(String[] args) throws IOException, InterruptedException {// 创建NIO ServerSocketChannelServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.socket().bind(new InetSocketAddress(8000));// 设置ServerSocketChannel为非阻塞serverSocketChannel.configureBlocking(false);// 打开Selector处理Channel,多路复用器开启,获取SelectorSelector selector = Selector.open();//把ServerSocketChannel注册到selector上,selector对客户端accept连接操作感兴趣SelectionKey register = serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);System.out.println("ServerSocket服务启动成功!!!");while (true) {// 阻塞,等待需要处理的事件selector.select();// 获取selector中注册的全部事件的 SelectionKey 实例Set<SelectionKey> selectionKeys = selector.selectedKeys();Iterator<SelectionKey> iterator = selectionKeys.iterator();// 遍历SelectionKey对事件进行处理while (iterator.hasNext()) {SelectionKey key = iterator.next();// 如果是OP_ACCEPT事件,则进行连接获取,后读事件注册if (key.isAcceptable()) {//通过SelectionKey 反向找对应的 ServerSocketChannel ServerSocketChannel server = (ServerSocketChannel) key.channel();//获取到连接事件后,建立客户端连接SocketChannel socketChannel = server.accept();socketChannel.configureBlocking(false);// 注册了读事件,如果需要给客户端发送数据可以注册写事件socketChannel.register(selector, SelectionKey.OP_READ);System.out.println("客户端连接成功,且建立了read事件");} else if (key.isReadable()) {  // 如果是OP_READ事件,则进行读取和打印//扫描到已经注册的channel的read事件,获取对应的SocketChannel SocketChannel socketChannel = (SocketChannel) key.channel();//读取channel中的数据bufferByteBuffer byteBuffer = ByteBuffer.allocate(128);int len = socketChannel.read(byteBuffer);// 如果有数据,把数据打印出来if (len > 0) {System.out.println("接收到消息:" + new String(byteBuffer.array()));} else if (len == -1) { // 如果客户端断开连接,关闭SocketSystem.out.println("客户端断开连接~~~");socketChannel.close();}}//从事件集合里删除本次处理的key,防止下次select重复处理iterator.remove();}}}
}

启动本机main函数,windows环境下cmd,后
telnet localhost 8000 建立连接。

核心方法:

Selector.open()  //创建多路复用器 实质是epoll实例的创建和获取
socketChannel.register(selector, SelectionKey.OP_READ)  //将channel注册到selector多路复用器上
selector.select()  //阻塞等待需要处理的事件发生

epoll的几个方法:

epoll_create 创建epoll实例
epoll_ctl:注册到epoll的响应事件
epoll_wait:阻塞,等待事件的发生(连接、读取等事件)

Selector会不断轮询注册在其上的Channel,如果某个Channel上发生了连接/读写事件,channel就属于就绪状态,会被Selector轮询出来,然后通过SelectionKey 获取就绪的Channel集合,进行后续的IO操作。

Selector内部有2个集合:
channel 注册的连接集合 和 注册的事件集合

/*** @return  This selector's key set**/
public abstract Set<SelectionKey> keys();/***获取selector中注册的全部事件的 SelectionKey 实例* Returns this selector's selected-key set.*/
public abstract Set<SelectionKey> selectedKeys();
http://www.yayakq.cn/news/294232/

相关文章:

  • 学而思编程网站精准客源 获客
  • 网站加黑链酒店 企业网站建设的思路
  • 顶部固定网站模板建筑培训学校
  • 注册百度网站怎么弄网站模板内容怎么添加图片不显示
  • 建设工程招标专业网站实际讲解做钓鱼网站
  • 建设直播网站需要多少钱更改wordpress语言设置
  • 手机端网站提交表单验证代码seo推广思路
  • 有哪些在线做图的网站去国外做非法网站
  • 可以挣钱的网站北京爱空间装修公司
  • 个人网站建设课程介绍网盘搜索网站如何做的
  • 企业网站建设策划书网站建设分析魅族
  • 天猫网站企业网站专业性诊断分析wordpress加上vip解析
  • 小程序可以做网站吗做贷款网站犯法吗
  • 什么网站是最全的周口哪里有做网站的
  • 网站建设流程行业现状代理注册公司是不是要户口本
  • 做免费外贸网站网站上传到虚拟主机
  • 大二学生做网站难吗网页美工设计脚本
  • 可以做网站的服务器导购网站怎么做有特色
  • 梦创义网站建设公司给我一个可以在线观看片
  • 奥凯航空公司官方网站网站基础建设英文翻译
  • 网站开发项目swot分析WordPress文章采集软件
  • wordpress博客类似网站内容如何优化
  • 怎么用视频做网站背景珠海网站制作推荐
  • 个人域名能做网站吗百度下载安装2021
  • 金华市网站建设个人博客网站开发的原因
  • 中国廉政建设网网站东莞常平邮编
  • 佛山网站优化包年重庆一品建设集团有限公司网站
  • 怎么看网站关键词排名大学二级学院网站建设必要性
  • 百度推广登录账号首页快速seo软件
  • 环保网站建设说明书珠海做网站找哪家好