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

查pv uv的网站wordpress取消自动更新

查pv uv的网站,wordpress取消自动更新,情侣主题 wordpress,一起做网店网站哪里进货的NIO简单介 NIO 非阻塞IO模型,基于缓冲区(Buffer)读写数据,读写后的数据通过通道(Channel)进行传输,采用选择器(Selector)管理多个通道从而实现高并发。 核心组件:1. Buffer 为一个内存数组作为数据容器,代替传统的Inpu…
  • NIO简单介
    NIO 非阻塞IO模型,基于缓冲区(Buffer)读写数据,读写后的数据通过通道(Channel)进行传输,采用选择器(Selector)管理多个通道从而实现高并发。
    核心组件:1. Buffer 为一个内存数组作为数据容器,代替传统的InputStream和OutputStream;2. Channel 双向数据传输;3. Selector 监听多通道区别于传统的单线程管理多连接
  • 传统的IO模型
    阻塞、非阻塞、多路复用、信号驱动、异步IO
  • 简单的NIO服务器接收客户端TCP请求
 public void start(int port) throws IOException {//创建一个选择器管理通道Selector selector = Selector.open();//创建通道并注册到选择器(可创建多个通道)createChannel(selector, port);while (true) {//阻塞,等到有事件发生时继续执行selector.select();//处理事件Iterator<SelectionKey> keys = selector.selectedKeys().iterator();while (keys.hasNext()) {SelectionKey key = keys.next();keys.remove();//新连接到达if (key.isAcceptable()) {ServerSocketChannel socketChannel = (ServerSocketChannel) key.channel();SocketChannel channel = socketChannel.accept();channel.configureBlocking(false);//注册新的读取事件channel.register(selector, SelectionKey.OP_READ);continue;}//可读取数据if (key.isReadable()) {SocketChannel channel = (SocketChannel) key.channel();//定义读取数据的缓冲区ByteBuffer buffer = ByteBuffer.allocate(1024);//读取数据到缓冲int bytes = channel.read(buffer);//客户端关闭连接if (bytes == -1) {channel.close();continue;}//切换为读取模式buffer.flip();String message = new String(buffer.array(), 0, bytes);System.out.println("接收到消息");//回显消息给客户端channel.write(ByteBuffer.wrap(message.getBytes()));}}}}
private void createChannel(Selector selector, int port) throws IOException {//创建通道并绑定端口ServerSocketChannel socketChannel = ServerSocketChannel.open();socketChannel.bind(new InetSocketAddress(port));//设置为非阻塞socketChannel.configureBlocking(false);//将通道注册到选择器socketChannel.register(selector, SelectionKey.OP_ACCEPT);}
  • Netty基于NIO的异步事件驱动的网络应用框架
    特性:异步和事件驱动、高性能(高效的线程模型和缓冲区机制)、易使用和灵活可扩展
    涉及到 channel 、callback(事件发生时的回调)、Future和Promise(异步计算)、EventLoop(事件循环)、Pipeline和ChannelHandler管道和处理器、bootstrap引导类
 public static void start(int port) {// 创建两个EventLoopGroup事件循环组,一个用于接收客户端连接,一个用于处理客户端数据EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try {start(bossGroup, workerGroup, port);} catch (Exception e) {log.warn("Netty服务【{}】发生异常", port, e);} finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}
private static void start(EventLoopGroup bossGroup, EventLoopGroup workerGroup, int port) throws InterruptedException {//创建服务器启动对象ServerBootstrap serverBootstrap = new ServerBootstrap();//parentGroup:这个事件组用于接收客户端的连接请求。它会创建一个ServerChannel,用于监听并接收客户端的连接。一旦有连接请求到达,parentGroup就会将连接分配给childGroup中的一个EventLoop来处理。//childGroup:这个事件组用于处理接收到的连接的数据。它会创建一个或多个Channel,用于与客户端进行通信。每个Channel都有一个关联的EventLoop,用于处理该Channel的I/O操作。childGroup会负责管理这些Channel和EventLoop,包括事件循环、线程分配、I/O操作等。//通过使用两个不同的事件组,可以实现多线程处理客户端连接和数据的模型。parentGroup负责接收连接请求并将其分配给childGroup处理,childGroup负责处理具体的连接和数据操作,从而提高服务器的并发性能。serverBootstrap.group(bossGroup, workerGroup)//.option(ChannelOption)可设置其它各种参数//服务器通道实现采用NioServerSocketChannel.channel(NioServerSocketChannel.class)//针对服务端的所有连接(不论已连接或是创建连接).handler(new LoggingHandler())//针对已接收到的连接的处理器配置.childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel socketChannel) {//添加自定义解码器,如继承ByteToMessageCodec用于处理各种业务逻辑,解码器按添加的先后顺寻执行//ByteToMessageCodec主要用于解码字节数据,将其转换为消息对象,常用于解决粘包和拆包问题//ChannelInboundHandlerAdapter主要用于处理各种事件,如接收到数据、连接建立、异常处理等,同时为响应请求数据可以用用channel的writeAndFlush将数据写入并刷新网路socketChannel.pipeline().addLast(new IotDataDecoder(), new IotBusinessDecoder());}});//以下两行代码用于确保服务器在绑定端口后一直保持运行状态,直到接收到关闭信号//绑定服务器端口并启动服务 sync()使当前线程阻塞直到绑定服务器,绑定多个端口直接重复以下两行代码ChannelFuture channelFuture = serverBootstrap.bind(port).sync();//等待服务器关闭channelFuture.channel().closeFuture().sync();}
  • 通过NIO将数据流写入到本地文件
 private void write(InputStream stream, String targetPath) throws IOException {//创建通道FileChannel outChannel = FileChannel.open(Paths.get(targetPath), StandardOpenOption.CREATE, StandardOpenOption.WRITE);ReadableByteChannel inChannel = Channels.newChannel(stream);//创建缓冲区ByteBuffer buffer = ByteBuffer.allocate(2048);//写入和读取while (inChannel.read(buffer) != -1) {//调整缓冲区的位置以便读取,将位置调整到0buffer.flip();outChannel.write(buffer);//将缓冲区未读取的位置移动到起始位置buffer.compact();}buffer.flip();//判断是否有剩余内容while (buffer.hasRemaining()) {outChannel.write(buffer);}}
http://www.dtcms.com/a/546689.html

相关文章:

  • 【VS2019配置json解析库】VS2019配置json解析库教程
  • 网站开发人员应具备什么素质中国建设网证书查询平台
  • 怎么做一家网站简单网站开发准备
  • C++ 中的浅拷贝与深拷贝:概念、规则、示例与最佳实践(笔记)
  • 建站seo课程wordpress 小说 采集器
  • 淘宝平台 API 接口接入文档和参数说明调用示例
  • 网络建设网站电商网站开发的引言
  • 做网站商城需要申请商标吗个人网站可以做淘客
  • 个人网站 前置审批中国最顶尖的平面设计公司
  • 海淀区手机网站设计服务6微信商城平台
  • 深圳专门做写字楼的网站大气物流网站模块
  • 网站工商标识做网站的公司负责wordpress连通公众号
  • ggsci 4.0.0来了,新增400+套配色!
  • PostIn零基础学习,安装与配置
  • 上海做建材上什么网站好南通网站制作哪个好
  • 做湲兔费网站视颍中国建设银行总部网站
  • Taro多端适配技术解析
  • 学做网站 空间 域名网站建设的一般步骤包含哪些
  • 网站开发的目的 实习报告住房与建设局网站
  • 专门做超市dm网站路飞 wordpress
  • 亚马逊卖家做自己网站北京棋森建设有限公司网站
  • 律师推广网站排名iis里如何装php网站
  • 类似17做网店的网站wordpress插件关闭更新
  • 【人工智能数学基础】如何理解方差与协方差?
  • 那个网站可以做学历认证女装网站模板
  • Modbus Simulator
  • 网页设计网站期末作业石河子做网站
  • 温岭做网站的公司有哪些网页设计尺寸怎么测量
  • 怎么做网络乞丐网站在putty上怎样安装wordpress
  • 无锡网站建设818gx家装室内设计