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

qq网页版在线登录入口太原网站的优化

qq网页版在线登录入口,太原网站的优化,神级网页设计网站,wordpress 随机读取一篇文章说明 使用Netty框架构建的socket服务端在处理客户端请求时#xff0c;每接到一个客户端的连接请求#xff0c;服务端会分配一个channel处理跟该客户端的交互。如果处理该channel数据的ChannelHandler抛出异常没有捕获#xff0c;那么该channel会关闭。但服务端和其它客户端…说明 使用Netty框架构建的socket服务端在处理客户端请求时每接到一个客户端的连接请求服务端会分配一个channel处理跟该客户端的交互。如果处理该channel数据的ChannelHandler抛出异常没有捕获那么该channel会关闭。但服务端和其它客户端的通信不受影响。 代码示例 该示例验证场景 服务端和客户端建立了正常的连接服务端给该客户端分配了一个channel。从该channel读取数据的ChannelHandler抛出异常没有被捕获导致该channel被关闭服务端和该客户端的通信中断。但服务端和其它客户端的通信不受影响。 服务端代码片段 package com.thb.power.server;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler;/*** 服务端的主函数* author thb**/ public class MainStation {private static final Logger logger LogManager.getLogger();static final int PORT Integer.parseInt(System.getProperty(port, 22335));public static void main(String[] args) throws Exception {logger.traceEntry();// 配置服务器EventLoopGroup bossGroup new NioEventLoopGroup();EventLoopGroup workerGroup new NioEventLoopGroup();try {ServerBootstrap b new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 100).handler(new LoggingHandler(LogLevel.INFO)).childHandler(new MainStationInitializer());// 启动服务端ChannelFuture f b.bind(PORT).sync();// 等待直到server socket关闭f.channel().closeFuture().sync();} finally {// 关闭所有event loops以便终止所有的线程bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}logger.traceExit();}}package com.thb.power.server;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import com.thb.power.constant.PowerConstants; import com.thb.power.handler.VerifyChecksumHandler;import io.netty.buffer.Unpooled; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler;public class MainStationInitializer extends ChannelInitializerSocketChannel {private static final Logger logger LogManager.getLogger();Overridepublic void initChannel(SocketChannel ch) throws Exception {logger.traceEntry();ChannelPipeline p ch.pipeline(); p.addLast(new LoggingHandler(LogLevel.INFO));// 用报文开头的字符、结尾的字符作为分隔符解析成完整的报文 p.addLast(new DelimiterBasedFrameDecoder(PowerConstants.SOCKET_MAX_BYTES_PER_PACKET, true, Unpooled.wrappedBuffer(new byte[] {PowerConstants.SOCKET_END_MARK}),Unpooled.wrappedBuffer(new byte[] {PowerConstants.SOCKET_START_MARK}))); p.addLast(new VerifyChecksumHandler());logger.traceExit();} }package com.thb.power.handler;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.codec.CorruptedFrameException; import io.netty.util.ReferenceCounted;/*** 验证接收的报文的校验和* author thb**/ public class VerifyChecksumHandler extends ChannelInboundHandlerAdapter {private static final Logger logger LogManager.getLogger();Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {logger.traceEntry(); if (msg instanceof ByteBuf) {ByteBuf m (ByteBuf)msg;logger.info(msg reference count: {}, m.refCnt());// 此处人为构造场景以便验证抛出异常的情况。将引用计数减少1执行后引用计数变为0读数据会抛异常m.release();m.readByte();logger.info(readableBytes: m.readableBytes()); // 将收到的报文的每个字节转换为十六进制打印出来 logger.info(ByteBufUtil.prettyHexDump(m)); } else {// 这个数据不需要向后传递因为数据已经错误了// 传入的对象msg如果实现了ReferenceCounted接口那么显式就释放if (msg instanceof ReferenceCounted) {((ReferenceCounted)msg).release();}throw new CorruptedFrameException(received illegal data: not ByteBuf type);}logger.traceExit();}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {cause.printStackTrace();ctx.close();} }package com.thb.power.constant;/*** 保存了一些常数* author thb**/ public final class PowerConstants {/*** 定义了私有构造函数防止被外部实例化*/private PowerConstants() {}/*** 通信报文的起始符*/public static final byte SOCKET_START_MARK (byte)0x68;/*** 通信报文的的结束符*/public static final byte SOCKET_END_MARK (byte)0x16;/*** 每个报文的最大字节数*/public static final short SOCKET_MAX_BYTES_PER_PACKET 1024; }启动服务端 启动客户端并向服务端发送数据 服务端的ChannelHandler处理数据时抛出了异常断开了和该客户端的连接 从输出可以看出服务端处理客户端channel数据的ChannelHandler抛出了异常服务端终止了和该客户端的连接。 观察客户端的输出 从输出可以看出客户端终止了和服务端的连接。 服务端可以继续接受新的客户端连接 从输出可以看出服务端可以正常接受新的客户端的连接
http://www.dnsts.com.cn/news/72113.html

相关文章:

  • 邯郸网站网站建设网站建设代理费用
  • 电子类网站建设wordpress完成用户注册
  • 文山做女主播的在哪个网站英文专业的网站设计
  • 网站做维恩图做电容的网站
  • 创建建站wordpress 添加js代码
  • html5模板网站北京软件开发平均工资
  • 本地网站有什么可以做六安城市网优选
  • 如何做幸运28网站代理四川人力资源考试官网二建
  • 外包网站开发公司广州谷歌seo
  • 重庆市工程建设信息网新网站专业的国内网站建设公司
  • php做网站标题加链接广州装修公司哪家好
  • 绍兴网站建设价格上海松江品划建设网站
  • 现在的那家做网站比较好一些呢东莞做网站哪个公司最好
  • 秦皇岛网站制作 微商城建设2021年十大热点事件
  • 山东建设科技产品推广网站做网站流量怎么卖
  • 优度网站建设淘数据
  • 建材团购网站建设方案滕州盛扬网络公司网站建设推广
  • 什么是网站的域名展厅布置
  • 做招投标应该了解的网站四川住房建设厅网站增项查询
  • 怎么用网站推广wordpress 评论加图片
  • 内部网站建设要求软文营销推广
  • 枣阳城乡建设局网站凡客装修
  • 济南建设公司网站榆林市住房和城市建设局网站
  • 上海网站开发哪家好薇聊城门户网站建设
  • 六安做网站的全国工业设计大赛官网
  • 钓鱼转转网站在线生成软件网站开发设计费 怎么入账
  • 博客网站入口zimeiti wordpress
  • 济宁医院网站建设网站后台管理系统 asp
  • 沭阳做网站好的软件开发和网站建设那个好
  • 网站建设竣工验收报告漫画网站做任务给金币