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

做的网站上更改内容改怎么办关于网站设计的价格

做的网站上更改内容改怎么办,关于网站设计的价格,营销管理培训课程,做网站的人能看到浏览的人的信息吗前言 「作者主页」#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.hkea.cn/news/14282666/

相关文章:

  • 百度网站收录更新网站开发实用技术介绍
  • 杭州高端网站设计产品设计招聘网站
  • 网站icp不备案有关系吗咖啡网站建设
  • wordpress全站301各大设计网站
  • 搭建网站要什么配置网站优化包括
  • 个人网站 创意泉州网站建设报价
  • 微软的网站开发软件北京中小型网站建设
  • 网站建设捌金手指下拉二八桓台建设局网站
  • 博星卓越电子商务网站建设实训平台鱼骨建站公司
  • 东莞网站页设计制作wordpress 文章字段
  • 东莞网站建设商城网站公司 百度百科
  • 重庆网站建设论坛中国外发加工网app
  • 城乡建设局的官方网站哪些公司做网站开发
  • 彩妆网站建设什么是网站框架结构
  • 婚庆公司简介seo网站建站
  • 残疾人信息无障碍网站建设手机建模软件
  • 怎样开发手机网站建设深圳网页设计网页制作
  • 做ppt介绍网站吗公司网页设计注意事项
  • 网站制作模板网站订阅号可以做网站么
  • 网页源代码查看黑帽seo排名
  • 网络建站公司很多卖假药冒产品用二级域名做网站
  • 手机网站报名链接怎么做苏州建站费用
  • 旅游景区网站建设规划购物网站开发文献综述
  • 四川建设企业网站福州网页
  • 专业的模板建站企业辽宁省建设注册中心网站
  • 外贸网站模板大全手机网站jquery底部导航菜单
  • 阿里巴巴的网站建设响应式网站外包
  • aws的efs可以做网站的什么google谷歌搜索主页
  • 企业网站展示论文登录背景图片素材
  • 做网站一般多少钱为何打不开中国建设银行网站