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

网站上传后网络优化seo

网站上传后,网络优化seo,专做外贸衣服鞋网站有哪些,263企业会议邮箱登录入口内嵌式服务器不需要我们单独部署,列如SpringBoot默认内嵌服务器Tomcat,它运行在服务内部。使用Netty 编写一个 Http 服务器的程序,类似SpringMvc处理http请求那样。举例:xxl-job项目的核心包没有SpringMvc的Controller层,客户端却…

内嵌式服务器不需要我们单独部署,列如SpringBoot默认内嵌服务器Tomcat,它运行在服务内部。使用Netty 编写一个 Http 服务器的程序,类似SpringMvc处理http请求那样。举例:xxl-job项目的核心包没有SpringMvc的Controller层,客户端却可以发送http请求,好奇怪!!!其实xxl-job-core 内部使用Netty做了HttpServer。

package com.xxl.job.executor.test.dto;import lombok.Getter;
import lombok.Setter;/*** User: ldj* Date: 2024/10/11* Time: 11:23* Description: No Description*/
@Getter
@Setter
public class RequestDTO<T> {/*** 请求ur*/private String uri;/*** 请求参数*/private T param;
}

package com.xxl.job.executor.test.netty;import com.xxl.job.executor.test.handler.NettyHttpServerHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.timeout.IdleStateHandler;import java.util.concurrent.TimeUnit;/*** User: ldj* Date: 2024/10/11* Time: 10:57* Description: Netty Http服务*/
public class NettyHttpServer {public static void main(String[] args) {// 服务端口int port = 9990;// 接收请求线程池EventLoopGroup bossGroup = new NioEventLoopGroup();// 处理请求线程池EventLoopGroup workerGroup = new NioEventLoopGroup();try {ServerBootstrap bootstrap = new ServerBootstrap();bootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childOption(ChannelOption.SO_KEEPALIVE, true).childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel channel) throws Exception {channel.pipeline().addLast(new IdleStateHandler(0, 0, 30 * 3, TimeUnit.SECONDS)).addLast(new HttpServerCodec()).addLast(new HttpObjectAggregator(5 * 1024 * 1024)).addLast(new NettyHttpServerHandler(new BaseService())); // 自定义handler}});// bind 绑定端口,启动服务ChannelFuture future = bootstrap.bind(port).sync();System.out.println("remote server started!");future.channel().closeFuture().sync();} catch (Exception e) {e.printStackTrace();} finally {try {// 关闭 EventLoopGroupworkerGroup.shutdownGracefully();bossGroup.shutdownGracefully();} catch (Exception e) {System.out.println(e.getMessage() + e);}}}
}
package com.xxl.job.executor.test.netty;/*** User: ldj* Date: 2024/10/11* Time: 12:55* Description: No Description*/
public class BaseService {public String test(String param) {return "netty http test--> " + param;}
}
package com.xxl.job.executor.test.handler;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xxl.job.executor.test.dto.RequestDTO;
import com.xxl.job.executor.test.netty.BaseService;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.*;
import io.netty.util.concurrent.DefaultThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;/*** User: ldj* Date: 2024/10/11* Time: 11:11* Description: 处理请求逻辑*/
public class NettyHttpServerHandler extends SimpleChannelInboundHandler<FullHttpRequest> {private static final Logger logger = LoggerFactory.getLogger(NettyHttpServerHandler.class);private BaseService baseService;public NettyHttpServerHandler(BaseService baseService) {this.baseService = baseService;}private static ThreadPoolExecutor executor = new ThreadPoolExecutor(200,300,5,TimeUnit.SECONDS,new LinkedBlockingQueue<>(2000),new DefaultThreadFactory("netty-http-server"),new ThreadPoolExecutor.AbortPolicy());@Overrideprotected void channelRead0(ChannelHandlerContext channelHandlerContext, FullHttpRequest fullHttpRequest) throws Exception {RequestDTO<String> requestDTO = parseReqParam(fullHttpRequest);executor.execute(() -> {String response = getResponse(requestDTO);boolean keepAlive = HttpUtil.isKeepAlive(fullHttpRequest);writeToClient(channelHandlerContext, keepAlive, response);});}private void writeToClient(ChannelHandlerContext channel, boolean keepAlive, String response) {ByteBuf byteBuf = Unpooled.copiedBuffer(response, StandardCharsets.UTF_8);DefaultFullHttpResponse fullHttpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,byteBuf);HttpHeaders headers = fullHttpResponse.headers();headers.set(HttpHeaderNames.CONTENT_TYPE,HttpHeaderValues.TEXT_HTML);headers.set(HttpHeaderNames.CONTENT_LENGTH,fullHttpResponse.content().readableBytes());if(keepAlive){headers.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);}channel.writeAndFlush(fullHttpResponse);}private String getResponse(RequestDTO<String> requestDTO) {String uri = requestDTO.getUri();String param = requestDTO.getParam();try {// 硬编码!更好的做法可参考SpringMvc的解析注解的value放进一个Map<url,Method>switch (uri){case "/test":return baseService.test(param);default:return "请求路径不存在!";}} catch (Exception e) {e.printStackTrace();return e.getMessage();}}private RequestDTO<String> parseReqParam(FullHttpRequest fullHttpRequest) throws JsonProcessingException {String uri = fullHttpRequest.uri();String param = null;logger.info("有参数uri:{}", uri);HttpMethod method = fullHttpRequest.method();if (HttpMethod.GET.equals(method)) {QueryStringDecoder decoder = new QueryStringDecoder(uri);Map<String, List<String>> parameters = decoder.parameters();param = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(parameters);logger.info("parameters -> {}", param);uri = decoder.rawPath();logger.info("不带参数uri:{}", uri);}if (HttpMethod.POST.equals(method)) {String contentTypeValue = fullHttpRequest.headers().getAsString(HttpHeaderNames.CONTENT_TYPE);if(contentTypeValue.contains(HttpHeaderValues.APPLICATION_JSON.toString())){param = fullHttpRequest.content().toString(StandardCharsets.UTF_8);}}RequestDTO<String> reqData = new RequestDTO<>();reqData.setUri(uri);reqData.setParam(param);return reqData;}
}

http://www.yayakq.cn/news/417187/

相关文章:

  • 服务号微网站怎么做的如何做电子商务网站
  • 做购物类网站有哪些微信官方小程序商城
  • 小说网站开发过程 实训报告怎么查一个网站是什么程序做的
  • 学做蛋糕的网站房产备案查询
  • 不知情的情况下帮别人做网站他违法微信小程序源码提取工具
  • 宁波做百度网站推广做家教网站
  • 网站建设做网站怎么做深圳网站外包公司
  • 有了域名就可以做网站了吗校园营销渠道有哪些
  • 网站文章图片如何跳转多备份 wordpress
  • 网络广告推广公司seo怎么做优化计划
  • 怎样在建设部网站上查公司信息深圳市网站制作最好的公司
  • 网站分析百度长沙租房网
  • dedecms 生成网站地图网络营销的营销方式
  • 手机网站建设机构电子商务网站建设实例
  • 郑州网站seo优静态网站的建设模板
  • 龙岩市住房和城乡建设局网站英文网站的首页怎么做
  • 网页制作工具的选择与网站整体风格是有关系的龙岩网站排名
  • 做网站的边框素材北京软件开发公司企云云
  • wordpress 整合ckseo关键词推广多少钱
  • 沈阳市建设局网站十堰网站建设u2028
  • 民权平台网站建设wordpress 安装 空白
  • 建设部二级结构工程师注销网站宜宾百度网站建设
  • 沽源网站建设案例wordpress数据库修改
  • 网站建设高级 上海WordPress如何实现多人协作
  • 新手学做网站 视频百度网盘网站页面怎么做识别二维码
  • icp备案网站管理员有负责吗中国建设劳动学会网站
  • 建设局的证件在哪个网站查免费咨询医生回答在线妇科
  • 网站建设都需要什么资料公司执照注册流程及费用
  • 店铺只做商品展示网站怎么做提供网站建设方案ppt
  • 静态网站托管免费地方门户网站源码