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

seo免费自学的网站wordpress网站网速慢

seo免费自学的网站,wordpress网站网速慢,吴中网站建设,wordpress8小时前背景 因为安装了正向隔离网闸#xff0c;导致数据传输的时候仅支持TCP协议和UDP协议#xff0c;因此需要开发TCP Client和Server服务来将数据透传#xff0c;当前环境是获取的数据并将数据转发到kafka 1.引入依赖 dependencygroupIdio.netty/groupId导致数据传输的时候仅支持TCP协议和UDP协议因此需要开发TCP Client和Server服务来将数据透传当前环境是获取的数据并将数据转发到kafka 1.引入依赖 dependencygroupIdio.netty/groupIdartifactIdnetty-all/artifactIdversion4.1.84.Final/version /dependency 2.编写TCP Server端  TCP Server代码 本代码已经解决TCP的粘包和半包问题需要通过固定的$符号进行数据分割使得数据不会错出现粘包和半包问题可以根据数据大小制定一个不会超过发送消息长度的值 package com.huanyu.forward.tcp.server;import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;Slf4j Service(tcpServer) ConditionalOnExpression(#{${spring.tcp-server.port:}.length()0}) public class TcpNettyServer {Value(${spring.tcp-server.port:22222})private Integer port;public static void main(String[] args) throws Exception {new TcpNettyServer().server(22222);}PostConstruct()public void initTcpServer() {try {log.info(start tcp server......);server(port);} catch (Exception e) {log.error(tcp server start failed);}}public void server(int port) throws Exception {//bossGroup就是parentGroup是负责处理TCP/IP连接的EventLoopGroup bossGroup new NioEventLoopGroup();//workerGroup就是childGroup,是负责处理Channel(通道)的I/O事件EventLoopGroup workerGroup new NioEventLoopGroup();ByteBuf buffer ByteBufAllocator.DEFAULT.buffer(1, 1);buffer.writeByte($);ServerBootstrap sb new ServerBootstrap();//初始化服务端可连接队列,指定了队列的大小500sb.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 100)//保持长连接.childOption(ChannelOption.SO_KEEPALIVE, true)// 绑定客户端连接时候触发操作.childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel sh) throws Exception {//handler是按顺序执行的ChannelPipeline pipeline sh.pipeline();//业务编码 -解决 数据粘包和半包问题-pipeline.addLast(new DelimiterBasedFrameDecoder(1024 * 1024 * 10, buffer)); // pipeline.addLast(new LoggingHandler(LogLevel.WARN));pipeline.addLast(new TcpBizFlagHandler());//业务编码//使用DataHandler类来处理接收到的消息pipeline.addLast(new TcpDataHandler());}});//绑定监听端口调用sync同步阻塞方法等待绑定操作完ChannelFuture future sb.bind(port).sync();if (future.isSuccess()) {log.info(tcp server is listening on :{}, port);} else {log.error(tcp server is failed , future.cause());//关闭线程组bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}//成功绑定到端口之后,给channel增加一个 管道关闭的监听器并同步阻塞,直到channel关闭,线程才会往下执行,结束进程。 // future.channel().closeFuture().await();} } 数据标志位接收代码 package com.huanyu.forward.tcp.server;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j;import java.nio.charset.StandardCharsets; import java.util.List;Slf4j public class TcpBizFlagHandler extends ByteToMessageDecoder {public static final String BIZ_FLAG bizFlag;private static final String FLAG_PRE {;private static final String FLAG_SUF }##;private static final byte[] FLAG_PREFIX FLAG_PRE.getBytes(StandardCharsets.UTF_8);private static final byte[] FLAG_SUFFIX FLAG_SUF.getBytes(StandardCharsets.UTF_8);Overrideprotected void decode(ChannelHandlerContext ctx, ByteBuf in, ListObject out) throws Exception {if (in.readableBytes() FLAG_PREFIX.length FLAG_SUFFIX.length) {log.warn(数据长度不够);text(in);return;}int prefixIndex in.readerIndex();if (!startsWith(in)) {text(in);// 忽略非标志位开头的数据in.skipBytes(in.readableBytes());log.warn(数据不包含指定的前缀);return;}int suffixIndex indexOf(in);if (suffixIndex -1) {log.warn(数据不包含指定的某字符);text(in);return;}int flagLength suffixIndex - prefixIndex FLAG_SUFFIX.length;byte[] flagBytes new byte[flagLength];in.readBytes(flagBytes); // 读取标志位// 保留标志位的对象结构-以{开头以}##结尾形如{k:v}##{k:v}$,和##之间的数据为补充的对象参数JSON,$为换行符号String flag new String(flagBytes, FLAG_PRE.length() - 1, flagBytes.length - FLAG_PREFIX.length - FLAG_SUFFIX.length 2, StandardCharsets.UTF_8);// 保存标志位到 Channel 属性中供后续使用ctx.channel().attr(AttributeKey.valueOf(BIZ_FLAG)).set(flag);// 剩余数据继续传递给下一个 Handler 处理透传out.add(in.readRetainedSlice(in.readableBytes()));}private static void text(ByteBuf in) {byte[] msgByte new byte[in.readableBytes()];in.readBytes(msgByte);log.warn(数据{}, new String(msgByte, StandardCharsets.UTF_8));}private boolean startsWith(ByteBuf buf) {for (int i 0; i TcpBizFlagHandler.FLAG_PREFIX.length; i) {if (buf.getByte(buf.readerIndex() i) ! TcpBizFlagHandler.FLAG_PREFIX[i]) {return false;}}return true;}private int indexOf(ByteBuf buf) {int readerIndex buf.readerIndex();int readableBytes buf.readableBytes();for (int i 0; i readableBytes - TcpBizFlagHandler.FLAG_SUFFIX.length; i) {boolean match true;for (int j 0; j TcpBizFlagHandler.FLAG_SUFFIX.length; j) {if (buf.getByte(readerIndex i j) ! TcpBizFlagHandler.FLAG_SUFFIX[j]) {match false;break;}}if (match) {return readerIndex i;}}return -1;} }业务转发/解析代码  package com.huanyu.forward.tcp.server;import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils;import static com.aimsphm.forward.tcp.server.TcpBizFlagHandler.BIZ_FLAG;Slf4j Service public class TcpDataHandler extends ChannelInboundHandlerAdapter {// Resourceprivate KafkaTemplateString, Object template;//接受client发送的消息Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {Channel channel ctx.channel();// 获取标志位String flag (String) channel.attr(AttributeKey.valueOf(BIZ_FLAG)).get();if (ObjectUtils.isEmpty(flag)) {log.warn(没有业务标识);return;}ByteBuf buf (ByteBuf) msg;byte[] msgByte new byte[buf.readableBytes()];buf.readBytes(msgByte); // template.send(haha.haha.ha, gbk.getBytes());log.info(bizFag:{},data: {}, flag, new String(msgByte));}//通知处理器最后的channelRead()是当前批处理中的最后一条消息时调用Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {ctx.flush();}//读操作时捕获到异常时调用Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {ctx.close();}//客户端去和服务端连接成功时触发Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception { // ctx.writeAndFlush(Unpooled.copiedBuffer(hello client [你好客户端].getBytes()));log.info(client 连接成功 {}, ctx.channel());} }3.编写客户端代码 TCP Client 代码 package com.huanyu.forward.tcp.client;import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.Getter; import lombok.extern.slf4j.Slf4j;import java.util.stream.IntStream;Getter Slf4j public class TcpNettyClient {public static void main(String[] args) {extracted();}private static void extracted() {try {TcpNettyClient client new TcpNettyClient(localhost, 4444);Channel channel client.getChannel();IntStream.range(0, 1000).parallel().forEach(i - {ByteBuf buf ByteBufAllocator.DEFAULT.buffer();buf.writeBytes(({\cell-topic (i 1) \:true}##{01#.01#\:\data1\}).getBytes());buf.writeByte($);channel.writeAndFlush(buf);});} catch (Exception e) {log.error(出现异常, e);}}private Channel channel;//连接服务端的端口号地址和端口号public TcpNettyClient(String host, int port) {tcpClient(host, port);}public void tcpClient(String host, int port) {try {final EventLoopGroup group new NioEventLoopGroup();Bootstrap b new Bootstrap();b.group(group).channel(NioSocketChannel.class) // 使用NioSocketChannel来作为连接用的channel类.handler(new ChannelInitializerSocketChannel() { // 绑定连接初始化器Overridepublic void initChannel(SocketChannel ch) throws Exception {System.out.println(正在连接中...);ChannelPipeline pipeline ch.pipeline();pipeline.addLast(new TcpClientHandler()); //客户端处理类}});//发起异步连接请求绑定连接端口和host信息final ChannelFuture future b.connect(host, port).sync();future.addListener(new ChannelFutureListener() {Overridepublic void operationComplete(ChannelFuture arg0) throws Exception {if (future.isSuccess()) {log.info(连接服务器成功:);} else {log.warn(连接服务器失败:);System.out.println(连接服务器失败);group.shutdownGracefully(); //关闭线程组}}});this.channel future.channel();} catch (InterruptedException e) {log.error(TCP服务端启动异常, e);}}} 客户端数据解析代码 package com.huanyu.forward.tcp.client;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler;import java.util.Map;public class TcpClientHandler extends SimpleChannelInboundHandlerMapString, ByteBuf {//处理服务端返回的数据Overrideprotected void channelRead0(ChannelHandlerContext ctx, MapString, ByteBuf data) throws Exception {ByteBuf msg data.get(topic);byte[] msgByte new byte[msg.readableBytes()];msg.readBytes(msgByte);System.out.println(接受到server响应数据: new String(msgByte));}Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception { // ctx.writeAndFlush(Unpooled.copiedBuffer(hello server 你好.getBytes()));super.channelActive(ctx);}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {ctx.close();} }备注 1. 为了尽可能的降低性能消耗数据以字节数组的形式发送 2. 业务字段通过{key:value}##作为消息的头部用数据标志位处理器进行处理 3. 真实要传送的数据并不解析出来并以$结尾解决粘包和半包问题 记录备查
http://www.dnsts.com.cn/news/230595.html

相关文章:

  • 可信赖的手机网站设计产品推广平台
  • 辽宁网站建站优化公司中信建设有限责任公司 联系方式
  • 筑梦网站建设重庆企业网站建设哪家好
  • 自适应网站建设都找全网天下做外贸的网站有那些
  • 建站服务搭建的页面时常州seo第一人
  • 网站稳定期的推广高级网站开发工程师
  • 建设网站地图素材wordpress 时间调用
  • 中国优秀企业网站欣赏常见的网站空间
  • 怎么做自我介绍网站实名制认证网站
  • 双滦网站建设fsockopen wordpress
  • 长安区建设局网站广州网站开发培训
  • vue.js和vs做网站比较wordpress淘宝客插件开发
  • 国内精品网站建设沈阳建设工程信息网可访问中项网
  • 狠狠做最新网站中国建设有限公司官网
  • 交互网站开发培训云搜索app官网
  • 阿里云服务器 多个网站微信怎么开创公众号
  • php 微信 网站开发南通哪里做网站
  • 小说网站要怎么做乾安网站建设
  • joomla 多语言网站网站排名快速提升
  • 咸阳做网站托管网页版微信登录显示二维码已失效
  • 网站域名不要了怎么做用DW做的网站怎么分享给别人
  • 新余网站建设公司如何创建一家自己的公司
  • 包装在线设计网站企业邮箱账号
  • vf建设银行网站网站页面设计的特色
  • 带你做网站毕设政务服务网站 建设方案
  • 专业做包装的电商网站江门制作网站公司
  • 360网站建设服务器网站做三个月收录100
  • 网站首页只显示域名政务服务网登录入口
  • 网站设计团队名称免费做app的网站哪个好
  • 关于网站建设的建议自贡市网站建设