如何建立优秀企业网站wordpress 雅黑

bicheng/2026/1/25 2:37:18/文章来源:
如何建立优秀企业网站,wordpress 雅黑,媚娘直播,wordpress怎样更改文章阅读次数本篇将讲述如何书写简单的Netty服务端和客户端。 1. 编写服务端 所有的Netty服务器都需要以下两部分#xff1a; 至少一个ChannelHandler#xff0c;该组件实现了服务器对从客户端接收的数据的处理#xff0c;即它的业务逻辑。引导#xff0c;配置服务器的启动代码。至少…本篇将讲述如何书写简单的Netty服务端和客户端。 1. 编写服务端 所有的Netty服务器都需要以下两部分 至少一个ChannelHandler该组件实现了服务器对从客户端接收的数据的处理即它的业务逻辑。引导配置服务器的启动代码。至少它会将服务器绑定到它要监听连接请求的端口上。 1.1 ChannelHandler和业务逻辑 ChannelHandler是一个接口族的父接口它负责接收并响应事件通知。在netty应用程序中所有的数据处理逻辑都包含在这些核心抽象的实现中。 服务器要响应传入的消息需要实现ChannelInboundHandler接口用来定义响应入站事件的方法。一般继承ChannelInboundHandlerAdapter类就足够了它提供了ChannelInboundHandler的默认实现。 接口中比较重要的方法有 ChannelRead()对于每个传入的消息都要调用。ChannelReadComplete()通知 ChannelInboundHandler最后一次对ChannelRead()的调用是当前批量读取中的最后一条消息。exceptionCaught()在读取操作期间有异常抛出时会调用。 对应的服务端Handler代码如下 // 标识一个ChannelHandler可以被多个Channel安全地共享 ChannelHandler.Sharable public class EasyNettyServerHandler extends ChannelInboundHandlerAdapter {Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf input(ByteBuf) msg;// 打印来自客户端的信息System.out.println(服务端接受请求 input.toString(StandardCharsets.UTF_8));// 将接收到的消息写给发送者而不冲刷出站消息ctx.write(input);}Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {// 将未决消息冲刷到远程节点并关闭该Channelctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {// 打印异常堆栈正式项目建议用logger组件打印cause.printStackTrace();// 关闭该channel,关闭连接ctx.close();} } 如果不捕获异常会发生什么 每个channel都拥有一个与之相邻的ChannelPipeline其持有一个ChannelHandler的实例链。在默认情况下ChannelHandler会把对它的方法的调用转发给链中的下一个ChannelHandler。如果exceptionCaught方法没有被链中的某处实现那么所接收的异常将被传递到ChannelPipeline的尾端并被记录。因此我们的应用程序中应该提供至少一个实现了exceptionCaught()方法的ChannelHandler. 除了ChannelInboundHandlerAdapter外还有很多需要学习的ChannelHandler的子类型和实现。当前我们需要记住以下关键点 针对不同类型的事件来调用ChannelHandler;应用程序通过实现或者扩展ChannelHandler来挂钩到事件的生命周期并提供自定义的应用程序逻辑在架构上ChannelHandler有助于保持业务逻辑与网络处理代码的分离简化了开发过程。  1.2 引导服务器 EasyNettyServerHandler 实现核心业务逻辑后就可以初始化服务器了具体步骤如下 绑定到服务器将在其监听并接受传入连接请求的端口配置Channel,以将有关的入站消息通知给EasyNettyServerHandler 实例。 传输 在网络协议中的标准多层视图中传输层提供了端到端的或者主机到主机的通信服务。 因特网通信建立在TCP传输之上。除了一些由Java NIO实现提供的服务器端性能增强外NIO传输大多数时候指的就是TCP传输。 服务端实例代码如下 Slf4j public class EasyNettyServer {public static final int PORT 4700;public static void main(String[] args) throws Exception {new EasyNettyServer().start();}public void start() throws Exception {final EasyNettyServerHandler serverHandler new EasyNettyServerHandler();// 创建EventLoopEventLoopGroup group new NioEventLoopGroup();try {// 创建ServerBootstarpServerBootstrap bootstrap new ServerBootstrap();// 指定所使用的NIO传输Channel;使用指定的端口设置套接字地址添加到一个Handler到子Channel的ChannelPipelinebootstrap.group(group).channel(NioSctpServerChannel.class).localAddress(new InetSocketAddress(PORT)).childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {// EasyNettyServerHandler被标注为Sharable所以总能使用同样的实例socketChannel.pipeline().addLast(serverHandler);}});// 异步地绑定服务器调用sync()方法阻塞等到直到绑定完成ChannelFuture future bootstrap.bind().sync();// 获取Channel的CloseFuture,并阻塞当前线程直到它完成future.channel().closeFuture().sync();} catch (Exception e) {log.error(Init netty server fail , e);} finally {// 关闭EventLoopGroup释放所有的资源group.shutdownGracefully().sync();}} } 下面是服务器的主要代码组件 EasyNettyServerHandler实现了业务逻辑main()方法引导/初始化了服务器 引导过程所需要的步骤如下 创建一个ServerBootstrap的实例以引导和绑定服务器创建并分配一个NioEventLoopGroup实际以进行事件的处理如接受新链接以及读、写数据指定服务器绑定的本地InetSocketAddress使用一个EasyNettyServerHandler的实例初始化一个新的Channel调用ServerBootstrap.bind()方法绑定服务器 做完以上步骤服务器已经初始化就绪能被使用了。 2.编写客户端 客户端将会 连接到服务器发送一个或者多个消息对于每个消息等到并接受从服务器发回的相同的消息关闭连接 编写客户端所涉及的两个主要代码部分也是业务逻辑和引导。 2.1 通过ChannelHandler实现客户端逻辑 在客户端将使用ChannelInboundHandler扩展SimpleChannelInboundHandler类以处理所有必须得任务。一般需要重写以下方法 channelActive()在到服务器的连接已经建立之后将调用channelRead0()当从服务器接收到一条消息时被调用exceptionCaught()在处理过程中引发异常时被调用 // 标记该类的实例可以被多个Channel共享 ChannelHandler.Sharable public class EasyNettyClientHandler extends SimpleChannelInboundHandlerByteBuf {Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {// 当被通知Channel是活跃的时候发送一条消息ctx.writeAndFlush(Unpooled.copiedBuffer(Hello Netty!, CharsetUtil.UTF_8));}Overrideprotected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf) throws Exception {// 记录已接收消息的转储System.out.println(Client received: byteBuf.toString(CharsetUtil.UTF_8));}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {// 在发生异常时记录错误并关闭channel连接cause.printStackTrace();ctx.close();} } 重写channelRead0()方法即每当接收数据时都会调用该方法。需要注意的是由服务器发送的消息可能会被分块接收。如服务器发送了5字节那么不能保证这5字节会被一次性接收。即便是这么少的数据channelRead0()方法也可能被调用两次第一次使用一个持有3字节的BuyeBuf,第二次使用一个持有2字节的ByteBuf。作为一个面向流的协议TCP保证了字节数组将会按照服务器发送顺序去接收。 SimpleChannelInboundHandler与ChannelInboundHandler 这里的客户端为啥使用SimpleChannelInboundHandler而不是ChannelInboundHandler 在客户端当channelRead0()方法完成时已经有了传入消息且处理完它了。当该方法返回时SimpleChannelInboundHandler负责释放指向保存该消息的Bytebuf的内存引用。 在EasyNettyServerHandler中还需要将传入消息回送给发送者而write()操作是一部的直到channelRead()方法返回后可能仍然没有完成。为此EasyNettyServerHandler扩展了ChannelInboundHandlerAdapter,其在这个时间点上不会释放消息。 消息在EasyNettyServerHandler的channelReadComplete()方法中当writeAndFluseh()方法被调用时释放。 2.2 引导客户端  相关代码如下 public class EasyNettyClient {public static final String HOST 127.0.0.1;public static final int PORT 8009;public static void main(String[] args) throws Exception {new EasyNettyClient().start();}public void start() throws Exception {NioEventLoopGroup group new NioEventLoopGroup();try {// 创建BootstrapBootstrap bootstrap new Bootstrap();bootstrap.group(group) // 指定EventLoopGroup以处理客户端事件.channel(NioSocketChannel.class) // 需要适用于NIO的实现;适用于NIO传输的Channel类型.remoteAddress(new InetSocketAddress(HOST, PORT)) //设置服务器的InetSocketAddress.handler(new ChannelInitializerSocketChannel() { Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {socketChannel.pipeline().addLast(new EasyNettyClientHandler());}});// 连接到远程节点阻塞等待直到连接完成ChannelFuture future bootstrap.connect().sync();// 阻塞直到Channel关闭future.channel().closeFuture().sync();} finally {// 关闭线程池并且释放所有资源group.shutdownGracefully().sync();}} } 客户端和服务端同时使用了NIO传输可也可以在服务端和客户端分别使用不同的传输。如服务端使用NIO传输客户端使用OIO传输。如何选择用于特定用例的特定传输的各种因素和场景在后面的系列会讲。 总结引导客户端的步骤 为初始化客户端创建了一个Bootstrap实例为进行事件处理分配了一个NioEventLoopGroup实例其中事件处理包括创建新链接以及处理入站和出站数据。为服务器连接创建了一个InetSocketAddress实例当连接被创建是一个EasyNettyClientHandler实例将被安装到该channel对应的ChannelPipeline中在一切都设置完后调用Bootstrap.connect方法连接到远程节点。 以上步骤便完成客户端了。 3.运行程序 3.1 正常流程 先启动服务端再启动客户端服务端会收到“Hello Netty”的指令。接着服务器报告并接收到的消息并将其传回客户端客户端报告返回的消息并退出。 服务端 客户端 以上的行为是正常的行为。

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

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

相关文章

景县做个油管的网站怎么做网页制作软件教程

JavaScriptt的运算符和语句 一.运算符 算术运算符 数字是用来计算的,比如:乘法 * 、除法 / 、加法 、减法 - 等等,所以经常和算术运算符一起。 算术运算符:也叫数学运算符,主要包括加、减、乘、除、取余&#xff…

做瞹瞹爱视频网站简单的视频制作软件推荐

进阶版:找单身狗2https://blog.csdn.net/2301_80220607/article/details/136143380?spm1001.2014.3001.5501 题目: 在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。 例…

免费做英文网站免费申请

一、概述 1、是什么 CLIP 的中文版,训练使用2亿 图-文 对的对比学习(不是LLM的预测下一个token),是一个双塔模型(图像和文本各子拥有一个编码器)。由于对齐了图像和文本特征,可以用来做:图-图(文章中没有相关测试任务)、图-文、文-图、文-文(文章中没有相关测试…

电子商务网站需求分析敦化市建设局网站

Given a singly linked list, determine if it is a palindrome. 一开始想用栈,但是试来试去发现写不出来遂放弃,后来想想再不济可以转换成数组然后分别两头扫,但是这样就用了O(n) 的空间,再进一步,可不可以在链表里模…

酒店移动网站建设方案网站 美食频道 建设

目录 一、抖音外卖商品模型 二、商家运营流程 (一)商家入驻流程 (二)商品发布流程 三、推广带货流程 (一)短视频带货 (二)直播视频带货 【直播工具】 【直播流程】 直播前…

找南昌兼职做网站的常德生活网

1、HashMap: 1)、 引入 如果业务需要我们去用姓名的拼音手写字母匹配完整姓名,那么如果用单列数据,我们可能需要两个集合才能存储,而且两个集合之间没有关联不好操作,这种时候双列数据就会起很大作用 2&…

专业型网站网站做团购网站商品从哪里找

掌握SQL的“删除艺术”:如何使用DROP TABLE命令 在数据库管理中,有时候我们需要彻底删除一个表,这可能是为了重新设计数据库结构,或者因为某些表不再需要。SQL 提供了 DROP TABLE 语句来实现这一功能。本文将详细介绍 DROP TABLE…

广告公司网站建设的定位网站设置搜索框是什么知识点

一、对齐: 1.激活对齐:视图–》对齐 2.新建一个文件,然后置入一张图片,设置一个参考线,使用移动工具进行移动,当移动到参考线附近的时候图片会自己吸到参考线上。 3.移动到参考线的时候如需设置空隙&…

网站建设有哪些企业网站关键词优化的步骤

Word文档里有数据表格,如果编辑修改起来感觉没那么方便或容易出错,不妨将文档转换成Excel表格再来处理。 将Word文档转换成Excel,比较常用的是复制粘贴方法,也就是将Word文档的表格复制后,再粘贴到Excel表格里&#x…

买好域名和云主机后怎么做网站工信部外国网站备案

哈哈, 今天是2012-12-21,传说中的世界末日,不过现在看来,一切都是空的。。。 在这个容易记忆的日子里,我的博客开通了。他将伴随我以后的学习开发,期望我能充分利用博客,帮我养成常总结、常记笔…

天津网站制作计划工业和信息化部网站备案

一、Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区)&#xff0c…

维护网站要做哪些工作十大超级软件免费下载

下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块。每一个问题都可以扩充为一个教程,如果可能的话。某些问题甚至会涉及多个领域。 我之前还没有出过和这些题目一样难的面试题,如果你…

做计算机网站有哪些功能网页模板怎么下载

关于数组的内容 Verilog数组声明的基本语法 <data_type><vector_size><array_name><array_dimension> 例如&#xff1a; reg[15:0] RAM [0:4095];//储存器数组SystemVerilog允许任何数据类型的非压缩数组 SystemVerilog将非压缩数组的声明进行了扩展…

石家庄新钥匙建站广州有什么好玩的山

前言 说到服务信息&#xff0c;我们还是得回到NamingService&#xff0c;因为这是和NacosServer进行服务注册的核心组件&#xff0c;内部提供了注册、获取Nacos实例的能力。至于其他组件&#xff0c;如Ribbon&#xff0c;在调用时需要所有实例信息来进行负载&#xff0c;那肯定…

建手机端网站代码生成器手机版

一.Docker环境配置 1.拉取Docker镜像 sudo docker pull ubuntu:18.04拉取的为ununtu18版本镜像&#xff0c;环境十分干净&#xff0c;可以通过以下命令查看容器列表 sudo docker images 如果想删除多余的docker image&#xff0c;可以使用指令 sudo docker rmi -f <id&g…

seo技术306如何进行网站的seo

方法一&#xff1a; 打开 Microsoft 官网&#xff1a; 打开开发人员工具&#xff08;按 F12 或右键点击“检查”&#xff09;。 点击“电脑模拟手机”按钮&#xff0c;即下图&#xff1a; 点击后重新加载此网页&#xff0c;即可看到下载选项。

h5跟传统网站有啥区别商务网站建设详细步骤

概念性的介绍&#xff0c;一略而过&#xff0c;不重要。 16.1 数据仓库技术 16.2 联机分析处理技术 16.3 数据挖掘技术 16.4 大数据时代的新型数据仓库 16.5 小结

网站后台的形成淄博网站制作方案

ps -ef |grep python # 查找工具执行PID python pid 11287lsof -p 11287 |wc -l 查看进程占用句柄设置句柄上限IOError: [Errno 24] Too many open files:解决方法

物理机安装虚拟机做网站好处深圳市光明区官网

前言 [MixedCli](https://zhangfisher.github.io/mixed-cli/)为monorepo应用开发命令行程序提供了一套解决方案&#xff0c;提供了更加友好的命令行开发体验。 第1步&#xff1a;创建工程 以一个典型的monorepo为例开始&#xff1a; flexapppackagescli corevuereact示例…

织梦云建站系统谷歌广告代理

前言&#xff1a;关于最近开源后&#xff0c;不少朋友问&#xff0c;怎么我下载下来&#xff0c;运行不了。或者怎么没有左边菜单。货不对板&#xff1f;还是我吃了数据&#xff1f;感言&#xff1a;开源不容易&#xff0c;更不容易的是&#xff0c;明明毫无保留&#xff0c;还…