netty 处理 get 请求

本文介绍如何使用Netty搭建一个简单的HTTP服务器,并实现GET请求处理。服务器能够接收客户端发送的GET请求,解析请求中的参数,并返回JSON格式的数据。

请求样式:

http://10.32.7.7:2360/?name=aaa   注意这里必须是问号,name  等号的形式

代码留存

package com.cip.arch.enne;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
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.HttpRequestDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.stream.ChunkedWriteHandler;

public class NettyServer
{
	private static final int SERVER_PORT = 2360;
	private static final String DEFAULT_URL = "/";
	
	public void start(final String ip) throws Exception
	{
		EventLoopGroup bossGroup = new NioEventLoopGroup();
		EventLoopGroup workerGroup = new NioEventLoopGroup();
		try
		{
			ServerBootstrap b = new ServerBootstrap();
			b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
					.childHandler(new ChannelInitializer<SocketChannel>()
					{
						@Override
						protected void initChannel(SocketChannel ch) throws Exception
						{
							ch.pipeline().addLast("http-decoder", new HttpRequestDecoder());
							ch.pipeline().addLast("http-encoder", new HttpResponseEncoder());
							ch.pipeline().addLast("http-aggregator", new HttpObjectAggregator(65536));
							ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler());
							ch.pipeline().addLast("HttpServerHandler", new NettyServerHandler());
						}
					});
			ChannelFuture future = b.bind(ip, SERVER_PORT).sync();
			System.out.println("HTTP server start: " + "http://"+ip+":" + SERVER_PORT + DEFAULT_URL);
			future.channel().closeFuture().sync();
		}
		finally
		{
			bossGroup.shutdownGracefully();
			workerGroup.shutdownGracefully();
		}
	}

	public static void main(String[] args) throws Exception {
		String ip = "10.32.7.7";
		new NettyServer().start(ip);
	}
}


package com.ctp.sech.engi;

import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_LENGTH;
import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;

import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.QueryStringDecoder;

public class NettyServerHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
	
	StringBuilder sb = new StringBuilder();
	JSONArray jsonarray = new JSONArray();
	
	public NettyServerHandler() {
		jsonarray.add(getJsonObj("name", "ar.sear.ocalplay"));
		jsonarray.add(getJsonObj("name", "ar.sear.ticket"));
		jsonarray.add(getJsonObj("name", "ar.sear.tel"));
		jsonarray.add(getJsonObj("name", "ar.sear.surehotel"));
	}
	
	public JSONObject getJsonObj(String name, String value) {
		JSONObject jsonobj = new JSONObject();
		jsonobj.put(name,value);
		return jsonobj;
	}
	
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		cause.printStackTrace();
	}
	
	@Override
	protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) //
			throws Exception {//函数执行次数?
		//解析get请求参数
		QueryStringDecoder decoder = new QueryStringDecoder(msg.getUri());  
		Map<String, List<String>> parame = decoder.parameters();  
		for(Entry<String, List<String>> entry : parame.entrySet()) {
			System.out.println(entry.getKey() + " : " +entry.getValue());
			
		}
		FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK); // 响应
		response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8");
		ByteBuf responseContentByteBuf = Unpooled.copiedBuffer(JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect).getBytes(Charset.forName("utf-8")));
		response.headers().set("Access-Control-Allow-Origin","*"); // 跨域
		response.headers().set(CONTENT_LENGTH, responseContentByteBuf.readableBytes());
		response.content().writeBytes(responseContentByteBuf);
		responseContentByteBuf.release();//zuoyong?
		ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);//
	}
	
}


考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值