怎么做hs网站黄页大全18勿看2000网站

bicheng/2026/1/16 10:23:42/文章来源:
怎么做hs网站,黄页大全18勿看2000网站,手机全部网站,做疏通什么网站推广好前言 「作者主页」#xff1a;雪碧有白泡泡 「个人网站」#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书…前言 「作者主页」雪碧有白泡泡 「个人网站」雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书活动 IO 在Java基础中IO流是一个重要操作先上八股 BIO传统的IO同步阻塞一个连接一个线程。一般不怎么使用AIOJDK7引入的异步非阻塞IONIOJDK1.4之后新的API是多路复用允许你一次性处理多个连接而不需要等待每个连接的完成。NIO 多路复用的核心概念是 Selector选择器和 Channel通道通过Channel、Buffer和Selector来进行数据传输和事件处理 Netty Netty是建立在NIO之上的一个框架提供了更高级的抽象如ChannelHandler和EventLoop简化了事件处理和网络编程。 执行流程如下图 具有高性能高可靠性高可扩展性还支持多种协议 我们以聊天流程为例 服务端启动客户端启动客户端启动连接上的时候告知服务端服务端读取到客户端的信息后立即发送信息给客户端客户端收到信息后也发送给服务端 1. 引入依赖 dependencygroupIdio.netty/groupIdartifactIdnetty-all/artifactIdversion4.1.76.Final/version/dependency2. 服务端 Slf4j public class NettyServer {private final static int PORT 9012;public static void main(String[] args) throws InterruptedException {/*** 包含childGroupchildHandlerconfig继承的父类AbstractBootstrap包括了parentGroup* */ServerBootstrap bootstrap new ServerBootstrap();/*** EventLoopGroup用于处理所有ServerChannel和Channel的所有事件和IO* */EventLoopGroup parentGroup new NioEventLoopGroup();EventLoopGroup childGroup new NioEventLoopGroup();try {/*** 绑定两个事件组* */bootstrap.group(parentGroup, childGroup)/*** 初始化socket定义tcp连接的实例* 内部调用ReflectiveChannelFactory实现对NioServerSocketChannel实例化* channelFactory是在AbstractBootstrap也就是bootstrap的父类* */.channel(NioServerSocketChannel.class)/*** 添加处理器* ChannelInitializer包括了SetChannelHandlerContext initMap** 这里比较有趣的事情就是使用被注册的channel去初始化其他的channel* 等初始化结束后移除该channel* 所以SocketChannel是一个工具** 在bind绑定端口的时候进行初始化和注册initAndRegister* 通过channel channelFactory.newChannel()得到初始化channel* init(channel)真正开始初始化* p channel.pipeline()得到ChannelPipeline* p.addLast开始添加* ch.eventLoop().execute将childHandler赋值并开启一个任务setAutoRead* 所以最后在监听读取的时候将会按照下面添加的channel进行读取** ChannelInitializer继承了ChannelInboundHandlerAdapter* 间接继承ChannelHandlerAdapterChannelInboundHandler* */.childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline ch.pipeline();/*** ByteBuf和String之间的转换** Decoders解密* pipeline.addLast(frameDecoder, new {link LineBasedFrameDecoder}(80))* pipeline.addLast(stringDecoder, new {link StringDecoder}(CharsetUtil.UTF_8))** Encoder加密* pipeline.addLast(stringEncoder, new {link StringEncoder}(CharsetUtil.UTF_8))** 使用上面的加密解密后就可以直接读取字符串* void channelRead({link ChannelHandlerContext} ctx, String msg) {* ch.write(Did you say msg ?\n)* }** */pipeline.addLast(new StringDecoder());pipeline.addLast(new StringEncoder());//自定义处理器pipeline.addLast(new ServerHandler1());}});ChannelFuture future bootstrap.bind(PORT).sync();log.info(服务器已启动);future.channel().closeFuture().sync();} finally {parentGroup.shutdownGracefully();childGroup.shutdownGracefully();}} }这段代码实现了一个使用Netty框架的服务器端它监听指定的端口并处理客户端的连接请求。 创建一个ServerBootstrap实例用于启动服务器。创建两个EventLoopGroup实例parentGroup用于处理服务器的连接请求childGroup用于处理客户端的数据通信。绑定事件组到ServerBootstrap实例。指定使用的NioServerSocketChannel作为服务器套接字通道的实现类。添加处理器到ChannelInitializer中该处理器负责初始化和配置新连接的SocketChannel。在处理器中通过ChannelPipeline添加了如下处理器 StringDecoder处理传入的字节数据并将其解码为字符串。StringEncoder处理传出的字符串数据并将其编码为字节。ServerHandler1自定义的处理器用于处理客户端发送的消息。 绑定服务器的端口号启动服务器。等待服务器的关闭事件。 处理器 Slf4j public class ServerHandler1 extends ChannelInboundHandlerAdapter {Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {log.info(Client Address {}读取的信息{}, ctx.channel().remoteAddress(),msg);ctx.channel().writeAndFlush(服务端writeAndFlush我是服务端);ctx.fireChannelActive();//睡眠TimeUnit.MILLISECONDS.sleep(500);}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {//打印异常cause.printStackTrace();//关闭Channel连接并通知ChannelFuture通常是出现异常或者是完成了操作ctx.close();} }4. 客户端 Slf4j public class NettyClient {private final static int PORT 9012;private final static String IP localhost;public static void main(String[] args) throws InterruptedException {/*** 服务端是ServerBootstrap客户端是Bootstrap* Bootstrap引导channel连接UDP连接用bind方法TCP连接用connect方法* */Bootstrap bootstrap new Bootstrap();/*** 服务端是EventLoopGroup客户端是NioEventLoopGroup* 这里创建默认0个线程一个线程工厂一个选择器提供者* */NioEventLoopGroup eventLoopGroup new NioEventLoopGroup();try {bootstrap.group(eventLoopGroup)/*** 初始化socket定义tcp连接的实例* */.channel(NioSocketChannel.class).handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline ch.pipeline();/*** 进行字符串的转换* */pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));/*** 自定义处理器* */pipeline.addLast(new ClientHandler1());}});ChannelFuture future bootstrap.connect(IP, PORT).sync();log.info(客户端访问);future.channel().closeFuture().sync();} finally {eventLoopGroup.shutdownGracefully();}} }这段代码实现了一个使用Netty框架的客户端它连接到指定的服务器端并与服务器进行通信。 创建一个Bootstrap实例用于启动客户端。创建一个NioEventLoopGroup实例用于处理客户端的事件和IO操作。绑定事件组到Bootstrap实例。指定使用的NioSocketChannel作为客户端套接字通道的实现类。添加处理器到ChannelInitializer中该处理器负责初始化和配置客户端连接的SocketChannel。在处理器中通过ChannelPipeline添加了如下处理器 StringDecoder处理传入的字节数据并将其解码为字符串。StringEncoder处理传出的字符串数据并将其编码为字节。ClientHandler1自定义的处理器用于处理与服务器之间的通信。 使用Bootstrap的connect()方法连接到指定的服务器IP和端口。等待连接完成。在连接成功后打印日志信息。等待客户端的关闭事件。 处理器 Slf4j public class ClientHandler1 extends ChannelInboundHandlerAdapter {Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {log.info(客户端读取的信息{}, msg);ctx.channel().writeAndFlush(客户端writeAndFlush我是客户端);TimeUnit.MILLISECONDS.sleep(5000);}/*** 当事件到达pipeline时候触发*/Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {ctx.channel().writeAndFlush(客户端开始聊天);}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();//关闭Channel连接ctx.close();}}结果 服务端日志 Client Address /127.0.0.1:63740读取的信息客户端开始聊天 Client Address /127.0.0.1:63740读取的信息客户端writeAndFlush我是客户端 Client Address /127.0.0.1:63740读取的信息客户端writeAndFlush我是客户端客户端日志 客户端读取的信息服务端writeAndFlush我是服务端 客户端读取的信息服务端writeAndFlush我是服务端总结 引导类-Bootstarp和ServerBootstrap Bootstarp和ServerBootstrap被称为引导类使你的应用程序和网络层相隔离。类似java项目的启动类。 连接-NioSocketChannel 客户端和服务端的启动都是采用配置的channel去连接处理器这里服务端和客户端是用NioSocketChannel 事件组-EventLoopGroup和NioEventLoopGroup 客户端使用的是NioEventLoopGroup服务端使用的是EventLoopGroup。 服务端和客户端的引导类启动后实现了配置的运行客户端和服务端的连接都是采用NioSocketChannel。 连接的流程 客户端创建一个channelchannel对应一个EventLoopEventLoop存放到NioEventLoopGroup中服务端监听到后创建一个channel连接channel对应一个EventLoopEventLoop存放到子的EventLoopGroup父的事件组负责监听一个事件对应一个子事件组。 在这里可以认为父是boss监听组子是工作组。当客户端发送信息的时候先被父监听然后将异步调用工作组。消息会经过事件组的所有处理器。 实际上服务端的事件组也可以使用NioEventLoopGroup。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5e676670b49e40dd83155e76094e9017.png 送书活动 本次送书1~3本【取决于阅读量阅读量越多送的越多】⌛️活动时间截止到2024-1月10号✳️参与方式关注博主三连点赞、收藏、评论 购买链接https://item.jd.com/13836258.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蚌埠网站制作公司价格wordpress 前台 很慢

BeetleX针对redis访问封了全async/await操作模式,通过它可以更高效地访问redis服务。BeetleX.Redis提供读写分离和多机故意写入处理,同时安全的TLS访问机制,在使用功能上组件支持绝大部分基础指令,并提供json,protobuf…

龙胜网站建设公司哪个网站可以做免费请帖

云计算作业 Linux DAY1[08/09] 1、创建alan1用户,并使用root用户切换用户至alan1用户。(两种方式切换【加-与不加-】,并总结其效果) [rootlocalhost ~]# useradd alan1 [rootlocalhost ~]# su alan1 [alan1localhost root]$ p…

深圳专业建站平台成免费crm软件排名

基本用法: 在终端中输入"uname"即可显示系统的内核名称。 可以结合不同的参数使用,获取更详细的系统信息。 常见参数: “-s”:显示操作系统名称。 “-n”:显示网络节点主机名。 “-r”:显示内核版…

手机网站 英文有口碑的做网站

前提 1、Qt当有界面 2、构造完成 满足以上两个条件qt会生成ui_xxx.h文件。 如何查看 方法1 在cpp文件中找到UI下的一个对象 如: ui->textEdit Ui::QWDialog按住Ctrl键,使用鼠标左键点击UI下的一个对象,如:textEdit、QWDia…

国外做任务网站有哪些wordpress后台代码修改

闭包: 可以访问外部函数的变量,在内层函数中访问到外层函数的作用域. 她可以创建私有变量,延长变量的生命周期。 function father() { Var name “baiyun”; function son() { Console.log(name,”name”); } son() } father(); 柯里…

如何在淘宝网做自己的网站网关高性能 网站建设

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版,以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

网站支付页面源代码网站下载服务器配置

现代农业养殖业中,养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例,并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…

自己架设网站服务器wordpress 积分集成

spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样&…

重庆餐饮加盟网站建设自助免费建站

我们为用户开发了一种为云存储付费的新方法。 与亚马逊的 S3 等传统云存储相比,用户不必信任服务器。 我们使用比特币智能合约来确保支付取决于服务器的可检索性证明 (PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。 可检索性证明 (PoR)…

网页制作模板的网站代码网站建设一般多少个板块

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

晋城两学一做网站怎么做单向网站链接

mysql Linux系统云服务器配置远程访问 1.安装mysql 服务器 2.配置远程登录用户权限 3.进行远程登录,并访问数据库 1.安装mysql 服务器 首先先安装一下云服务器 sudo apt-get install mysql-server安装好之后,我们直接以root用户登录: …

网站子目录怎么做的建设网站服务费会计分录

在Java中,链表实现主要体现在以下几种数据结构中: 1. LinkedList LinkedList类实现了List接口和Deque接口,提供了双向链表的实现。它允许null元素,提供了列表的顺序访问以及在列表的头部和尾部进行高效的插入和移除操作。Linked…

订单查询网站怎么做网站分享图片怎么做

编写Python爬虫时,常用的库包括Requests、Beautiful Soup和Scrapy。以下是三个简单的Python爬虫案例,分别使用Requests和Beautiful Soup,以及Scrapy。 1. 使用Requests和Beautiful Soup爬取网页内容: import requests from bs4 …

福州做网站的哪家好北京建设工程造价管理协会网站

1、选择单元格或单元格区域; 2、右击-设置单元格格式(或按ctrl1); 3、数字选项卡-自定义-h:mm:ss.000 4、单元格就可以输入精度为千分之一秒的时间,如:20:15:21.451 参考自https://zhidao.baidu.com/questi…

建设网站 法律责任鹤岗哈尔滨网站建设

增大不同class feature之间的距离用hinge loss 相关, similarity learning, svm https://www.youtube.com/watch?vQtAYgtBnhws https://www.youtube.com/watch?vbM4_AstaBZo&t286s

桂林网站建设桂林个人网站设计要求

Java运行时数据区是Java虚拟机规范中定义的一块区域,用于存储Java程序在运行过程中需要使用到的数据。这些数据包括: 1. 堆区:用于存储对象实例,是Java内存中最大的一块区域。2. 方法区:用于存储已被虚拟机加载的类信…

江宁建设局网站做技术类网站赚钱吗

目录 题目:删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 题目:两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) …

wordpress建站和定制网站Seo湖北网址大全

什么是移位寄存器 移位寄存器:是指多个寄存器并排相连,前一个寄存器的输出作为下一个寄存器的输入,寄存器中存放的数据在每个时钟周期向左或向右移动一位。 下面的右移移位寄存器因为左侧没有有效输入,所以在第4个时钟周期&…

文本网站代码空两格怎么做电商该怎么做起

Packet Tracer - 在思科路由器上配置 AAA 认证 地址表 目标 在R1上配置本地用户账户,并使用本地AAA进行控制台和vty线路的身份验证。从R1控制台和PC-A客户端验证本地AAA身份验证功能。配置基于服务器的AAA身份验证,采用TACACS协议。从PC-B客户端验证基…

app开发制作定制外包26单页面优化

目录 一、集群的概念 1、节点 2、索引 3、分片和副本 二、集群的架构 三、集群的部署方式 1、单主节点 2、多主节点 3、安全集群 四、搭建ES集群 1、elasticsearch中集群节点有不同的职责划分 2、elasticsearch中的每个节点角色都有自己不同的职责,因此…