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

上海网站群建设红孩子母婴网站开发背景

上海网站群建设,红孩子母婴网站开发背景,网站喜报怎么做,免费行情网站的推荐理由一、传统BIO的缺点 BIO属于同步阻塞行IO,在服务器的实现模型为#xff0c;每一个连接都要对应一个线程。当客户端有连接请求的时候#xff0c;服务器端需要启动一个新的线程与之对应处理#xff0c;这个模型有很多缺陷。当客户端不做出进一步IO请求的时候#xff0c;服务器…一、传统BIO的缺点 BIO属于同步阻塞行IO,在服务器的实现模型为每一个连接都要对应一个线程。当客户端有连接请求的时候服务器端需要启动一个新的线程与之对应处理这个模型有很多缺陷。当客户端不做出进一步IO请求的时候服务器端的线程就只能挂着不能去处理其他请求。这样会对造成不必要的线程开销。 二、阻塞与同步 同步和异步都是由基于应用程序和操作系统处理IO事件所采用的方式所决定的。 阻塞和非阻塞式指线程在得到调用结果之前是否被挂起主要针对线程。 三、NIO简介(同步非阻塞) Java NIO全称java non-blocking IO 是指JDK提供的新API。从JDK1.4开始Java提供了一系列改进的输入/输出的新特性被统称为NIO(即New IO)是同步非阻塞的。NIO是一种面向缓冲区的、基于通道的IO操作NIO有三大核心部分: Channel(通道) Buffer(缓冲区),Selector(选择器)java NIO的运行模式是客户端发送的链接请求都会被注册到Selector(选择器)上多路复用器轮询到有I/O请求时才会启动一个线程去服务。 四、NIO三大核心原理 NIO有三大核心部分: Channel(通道), Buffer(缓冲区),Selector(选择器) Buffer(缓冲区) 缓冲区本质上就是一块内存数据的读写都是通过Buffer类实现的。缓冲区buffer主要是和通道数据交互即从通道中读入数据到缓冲区和从缓冲区中把数据写入到通道中通过这样完成对数据的传输。 Channel(通道) java NIO的类似于流但是又有些不同既可以从通道中读取数据又可以写数据到通道。但流的(input和output)读写通常是单向的。通道可以非阻塞读取和写入通道通道可以支持读取或写入缓冲区也支持异步读写。 Selector选择器 Selector是一个java NIO组件可以检测一个或多个NIO通道并确定已经准备好进行读取或者写入。这样一个单独的线程就可以管理多个Channel,从而管理多个网络连接提高效率。 每个channel都会对应一个Buffer一个线程对应Selector,一个Selector对应多个Channel程序切换到那个channel是由事件决定Selector会根据不同的事件在各个通道上切换Buffer就是一个内存块底层就是一个数组数据的读取和写入都是通过Buffer来实现的 五、NIO三板斧 六、NIO实现案例 客户端 public class NioClient {public static void main(String[] args) throws IOException {SocketChannel socketChannelSocketChannel.open();socketChannel.configureBlocking(false);InetSocketAddress address new InetSocketAddress(127.0.0.1, 9000);if (!socketChannel.connect(address)) {while (!socketChannel.finishConnect()){System.out.println(连接中客户端可以进行其他工作);}String strhello world!;ByteBuffer wrap ByteBuffer.wrap(str.getBytes());socketChannel.write(wrap);//避免客户端中断System.in.read();}} }服务器端 public class NioServer {public static void main(String[] args) throws IOException {// 获取一个ServerSocket通道ServerSocketChannel serverChannel ServerSocketChannel.open();// serverChannel通道一直监听9000端口serverChannel.socket().bind(new InetSocketAddress(9000));// 设置serverChannel为非阻塞serverChannel.configureBlocking(false);//创建Selector选择器用来监听通道Selector selector Selector.open();// 把ServerSocketChannel注册到selector中并且selector对客户端的连接操作感兴趣SelectionKey selectionKey serverChannel.register(selector, SelectionKey.OP_ACCEPT);System.out.println(服务启动成功);while(true){/** 如果事件没有到达 selector.select() 会一直阻塞等待*/selector.select();SetSelectionKey selectionKeys selector.selectedKeys();IteratorSelectionKey iterator selectionKeys.iterator();while (iterator.hasNext()){SelectionKey key iterator.next();if (key.isAcceptable()) // 如果是OP_ACCEPT事件则进行连接获取和事件注册{ServerSocketChannel server (ServerSocketChannel) key.channel(); //连接获取SocketChannel socketChannel server.accept(); // 连接获取socketChannel.configureBlocking(false); // 设置为非阻塞SelectionKey selKey socketChannel.register(selector, SelectionKey.OP_READ); //这里只注册了读事件如果需要给客户端写数据则需要注册写事件System.out.println(客户端连接成功);}else if(key.isReadable()) //如果是OP_READ事件则进行读取和打印{SocketChannel socketChannel (SocketChannel) key.channel();ByteBuffer byteBuffer ByteBuffer.allocate(128);int len socketChannel.read(byteBuffer);if (len 0) //如果有数据则打印数据{System.out.println(接受到客户端数据new String(byteBuffer.array()));}else if(len-1) //如果客户端断开连接关闭socket{System.out.println(客户端断开连接);socketChannel.close();}}// 从事件集合中删除本次处理的key防止下次select重复处理iterator.remove();}}} }
http://www.zqtcl.cn/news/942052/

相关文章:

  • 潞城建设局网站建设网站服务器自营方式的特点
  • 西安网站seo公司东莞市专注网站建设怎么样
  • dede游戏网站模板如何做盆栽蔬菜网站
  • 江都建设网站网站开发技术介绍
  • 网站介绍视频怎么做网站建设优化服务
  • 可以左右滑动的网站有口碑的盐城网站建设
  • 360报危险网站注册界面设计
  • 不用淘宝客api如何做网站北京移动官网网站建设
  • 手表哪个网站做的好河北网站备案流程
  • 凡科做的网站推效果网站做seo第一步
  • 建设在线观看视频网站免费企业网站建设免费
  • 网站开发需要后台吗哪家建站公司好
  • 个人建设网站论文网站视频怎么做的
  • 不同类型的购物网站汉川网站建设
  • 网站开发需求文档范文广州公司网站托管
  • 网站制作公司官网首页撸撸撸做最好的导航网站
  • 网站建设毕业设计综述centos 安装wordpress lnmp
  • 济宁专业做网站网站建设中 html
  • 中国排名高的购物网站最新发布的手机2022
  • 备案的网站名与公司名称出国用哪个地图app好
  • 网站建设工作室图片文章资讯类网站
  • 深圳自助建站系统网站题目有哪些
  • 郑州做网站kuihuakeji软文发布的平台与板块
  • 一那个网站可以做一建题安全文化企业示范企业评价标准
  • 网站没有关键词收录phpstudy配置网站
  • 返利网站怎么做的做网站推广见客户的话术
  • 两个人看的视频在线观看成都网站seo厂家
  • 做汽车配件出口用什么网站好些微信朋友圈营销技巧
  • 怎样建设传奇网站空间什么做电子书下载网站
  • 自己怎么做dj 视频网站网站模板制作教程视频