加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

netty处理客户端传过来的get、post、websocket数据例子

发布时间:2020-12-15 03:21:41 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 用neety作为http服务器,在服务器端读取客户端传过来的get和post参数和websocket数据例子,netty版本3.6.6 package?com.penngo.http;import?java.net.

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

用neety作为http服务器,在服务器端读取客户端传过来的get和post参数和websocket数据例子,netty版本3.6.6
package?com.penngo.http;
import?java.net.InetSocketAddress;
import?java.util.concurrent.Executors;
import?org.jboss.netty.bootstrap.ServerBootstrap;
import?org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

public?class?HttpServer?{

????private?final?int?port;

????public?HttpServer(int?port)?{
????????this.port?=?port;
????}

????public?void?run()?{
????????ServerBootstrap?bootstrap?=?new?ServerBootstrap(new?NioServerSocketChannelFactory(
????????????????Executors.newCachedThreadPool(),?Executors.newCachedThreadPool()));
????????bootstrap.setPipelineFactory(new?HttpServerPipelineFactory());

????????bootstrap.bind(new?InetSocketAddress(port));
????????System.out.println("Web?socket?server?started?at?port?"?+?port?+?'.');
????????System.out.println("Open?your?browser?and?navigate?to?http://localhost:"?+?port?+?'/');
????}

????public?static?void?main(String[]?args)?{
????????int?port;
????????if?(args.length?>?0)?{
????????????port?=?Integer.parseInt(args[0]);
????????}?else?{
????????????port?=?8080;
????????}
????????new?HttpServer(port).run();
????}
}
package?com.penngo.http;
import?java.util.List;
import?java.util.Map;
import?org.jboss.netty.buffer.ChannelBuffer;
import?org.jboss.netty.buffer.ChannelBuffers;
import?org.jboss.netty.channel.ChannelFuture;
import?org.jboss.netty.channel.ChannelFutureListener;
import?org.jboss.netty.channel.ChannelHandlerContext;
import?org.jboss.netty.channel.ExceptionEvent;
import?org.jboss.netty.channel.MessageEvent;
import?org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import?org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import?org.jboss.netty.handler.codec.http.HttpRequest;
import?org.jboss.netty.handler.codec.http.HttpResponse;
import?org.jboss.netty.handler.codec.http.QueryStringDecoder;
import?org.jboss.netty.handler.codec.http.multipart.Attribute;
import?org.jboss.netty.handler.codec.http.multipart.DefaultHttpDataFactory;
import?org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
import?org.jboss.netty.handler.codec.http.multipart.InterfaceHttpData;
import?org.jboss.netty.handler.codec.http.multipart.InterfaceHttpData.HttpDataType;
import?org.jboss.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
import?org.jboss.netty.handler.codec.http.websocketx.PingWebSocketFrame;
import?org.jboss.netty.handler.codec.http.websocketx.PongWebSocketFrame;
import?org.jboss.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import?org.jboss.netty.handler.codec.http.websocketx.WebSocketFrame;
import?org.jboss.netty.handler.codec.http.websocketx.WebSocketServerHandshaker;
import?org.jboss.netty.handler.codec.http.websocketx.WebSocketServerHandshakerFactory;

import?org.jboss.netty.util.CharsetUtil;

import?static?org.jboss.netty.handler.codec.http.HttpHeaders.Names.*;
import?static?org.jboss.netty.handler.codec.http.HttpHeaders.*;
import?static?org.jboss.netty.handler.codec.http.HttpMethod.*;
import?static?org.jboss.netty.handler.codec.http.HttpResponseStatus.*;
import?static?org.jboss.netty.handler.codec.http.HttpVersion.*;

public?class?HttpServerHandler?extends?SimpleChannelUpstreamHandler?{
	private?WebSocketServerHandshaker?handshaker;
	private?static?final?String?WEBSOCKET_PATH?=?"/websocket";
	@Override
	public?void?messageReceived(ChannelHandlerContext?ctx,?MessageEvent?e)
			throws?Exception?{
		Object?msg?=?e.getMessage();
		if?(msg?instanceof?HttpRequest)?{
			handleHttpRequest(ctx,?(HttpRequest)?msg);
		}?else?if?(msg?instanceof?WebSocketFrame)?{
			handleWebSocketFrame(ctx,?(WebSocketFrame)?msg);
		}
	}

	private?void?handleHttpRequest(ChannelHandlerContext?ctx,?HttpRequest?req)
			throws?Exception?{
		System.out.println("handleHttpRequest?method=========="?+?req.getMethod());
		System.out.println("handleHttpRequest?uri=========="?+?req.getUri());
		if?(req.getMethod()?==?GET)?{?//?处理get请求
			if(req.getUri().equals("/websocket")){
				??//?Handshake
		????????WebSocketServerHandshakerFactory?wsFactory?=?new?WebSocketServerHandshakerFactory(
		????????????????getWebSocketLocation(req),?null,?false);
		????????handshaker?=?wsFactory.newHandshaker(req);
		????????if?(handshaker?==?null)?{
		????????????wsFactory.sendUnsupportedWebSocketVersionResponse(ctx.getChannel());
		????????}?else?{
		????????????handshaker.handshake(ctx.getChannel(),?req).addListener(WebSocketServerHandshaker.HANDSHAKE_LISTENER);
		????????}
			}
			else{
				QueryStringDecoder?decoder?=?new?QueryStringDecoder(req.getUri());
				Map<String,?List<String>>?parame?=?decoder.getParameters();
				List<String>?q?=?parame.get("q");?//?读取从客户端传过来的参数
				String?question?=?q.get(0);
				if?(question?!=?null?&&?!question.equals(""))?{
					System.out.println("r?:"?+?question);
					HttpResponse?res?=?new?DefaultHttpResponse(HTTP_1_1,?OK);
					String?data?=?"<html><body>你好,GET</body><html>";
					ChannelBuffer?content?=?ChannelBuffers.copiedBuffer(data,CharsetUtil.UTF_8);
					res.setHeader(CONTENT_TYPE,?"text/html;?charset=UTF-8");
					res.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN,?"*");
					setContentLength(res,?content.readableBytes());
					res.setContent(content);
					sendHttpResponse(ctx,?req,?res);
				}
			}
		}
		if?(req.getMethod()?==?POST)?{?//?处理POST请求
			HttpPostRequestDecoder?decoder?=?new?HttpPostRequestDecoder(
					new?DefaultHttpDataFactory(false),?req);
			InterfaceHttpData?postData?=?decoder.getBodyHttpData("q");?//?//
																		//?读取从客户端传过来的参数
			String?question?=?"";
			if?(postData.getHttpDataType()?==?HttpDataType.Attribute)?{
				Attribute?attribute?=?(Attribute)?postData;
				question?=?attribute.getValue();
				System.out.println("q:"?+?question);

			}
			if?(question?!=?null?&&?!question.equals(""))?{

				HttpResponse?res?=?new?DefaultHttpResponse(HTTP_1_1,?OK);
				String?data?=?"<html><body>你好,POST</body><html>";
				ChannelBuffer?content?=?ChannelBuffers.copiedBuffer(data,CharsetUtil.UTF_8);
				res.setHeader(CONTENT_TYPE,?"text/html;?charset=UTF-8");
				res.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN,?"*");
				setContentLength(res,?content.readableBytes());
				res.setContent(content);
				sendHttpResponse(ctx,?res);

			}
			return;
		}
	}

	@Override
	public?void?exceptionCaught(ChannelHandlerContext?ctx,?ExceptionEvent?e)
			throws?Exception?{
		e.getCause().printStackTrace();
		e.getChannel().close();
	}
	???private?void?handleWebSocketFrame(ChannelHandlerContext?ctx,?WebSocketFrame?frame)?{
	????????if?(frame?instanceof?CloseWebSocketFrame)?{
	????????????handshaker.close(ctx.getChannel(),?(CloseWebSocketFrame)?frame);
	????????????return;
	????????}
	????????if?(frame?instanceof?PingWebSocketFrame)?{
	????????????ctx.getChannel().write(new?PongWebSocketFrame(frame.getBinaryData()));
	????????????return;
	????????}
	????????if?(!(frame?instanceof?TextWebSocketFrame))?{
	????????????throw?new?UnsupportedOperationException(String.format("%s?frame?types?not?supported",?frame.getClass()
	????????????????????.getName()));
	????????}
	????????String?request?=?((TextWebSocketFrame)?frame).getText();
	????????System.out.println("收到socket?msg="?+?request);
	????????request?=?"这是来自服务器端的数据";
	????????ctx.getChannel().write(new?TextWebSocketFrame(request.toUpperCase()));
	????}
	private?static?void?sendHttpResponse(ChannelHandlerContext?ctx,HttpRequest?req,?HttpResponse?res)?{
		if?(res.getStatus().getCode()?!=?200)?{
			res.setContent(ChannelBuffers.copiedBuffer(res.getStatus()
					.toString(),?CharsetUtil.UTF_8));
			setContentLength(res,?res.getContent().readableBytes());
		}

		ChannelFuture?f?=?ctx.getChannel().write(res);
		if?(!isKeepAlive(req)?||?res.getStatus().getCode()?!=?200)?{
			f.addListener(ChannelFutureListener.CLOSE);
		}
	}
	?private?static?String?getWebSocketLocation(HttpRequest?req)?{
	????????return?"ws://"?+?req.getHeader(HOST)?+?WEBSOCKET_PATH;
	????}
}
package?com.penngo.http;
import?static?org.jboss.netty.channel.Channels.*;
import?org.jboss.netty.channel.ChannelPipeline;
import?org.jboss.netty.channel.ChannelPipelineFactory;
import?org.jboss.netty.handler.codec.http.HttpChunkAggregator;
import?org.jboss.netty.handler.codec.http.HttpRequestDecoder;
import?org.jboss.netty.handler.codec.http.HttpResponseEncoder;

public?class?HttpServerPipelineFactory?implements?ChannelPipelineFactory?{
????public?ChannelPipeline?getPipeline()?throws?Exception?{
????????//?Create?a?default?pipeline?implementation.
????????ChannelPipeline?pipeline?=?pipeline();
????????pipeline.addLast("decoder",?new?HttpRequestDecoder());
//????????pipeline.addLast("aggregator",?new?HttpChunkAggregator(65536));
????????pipeline.addLast("encoder",?new?HttpResponseEncoder());
????????pipeline.addLast("handler",?new?HttpServerHandler());
????????return?pipeline;
????}
}
<!DOCTYPE?html>
<html>
????<head>
????????<meta?charset="utf-8">
????????<title>Web?Socket?Example</title>
????????<script?src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"?type="text/javascript"></script>
????????<style>
????????textarea?{
????width:?500px;
????height:?100px;
}
????????</style>
????????<script>
????????$(function(){

????????????var?Sock?=?function()?{
?????????var?socket;
?????????if?(!window.WebSocket)?{
?????????????window.WebSocket?=?window.MozWebSocket;
?????????}

?????????if?(window.WebSocket)?{
?????????????socket?=?new?WebSocket("ws://localhost:8080/websocket");
?????????????socket.onopen?=?onopen;
?????????????socket.onmessage?=?onmessage;
?????????????socket.onclose?=?onclose;
?????????}?else?{
?????????????alert("Your?browser?does?not?support?Web?Socket.");
?????????}

?????????function?onopen(event)?{
?????????????getTextAreaElement().value?=?"Web?Socket?opened!";
?????????}

?????????function?onmessage(event)?{
?????????????appendTextArea(event.data);
?????????}

?????????function?onclose(event)?{
?????????????appendTextArea("Web?Socket?closed");
?????????}

?????????function?appendTextArea(newData)?{
?????????????var?el?=?getTextAreaElement();
?????????????el.value?=?el.value?+?'n'?+?newData;
?????????}

?????????function?getTextAreaElement()?{
?????????????return?document.getElementById('responseText');
?????????}

?????????function?send(event)?{
?????????????event.preventDefault();
?????????????if?(window.WebSocket)?{
?????????if?(socket.readyState?==?WebSocket.OPEN)?{
?????????????socket.send(event.target.message.value);
?????????}?else?{
?????????????alert("The?socket?is?not?open.");
?????????}
?????????????}
?????????}
?????????document.forms.inputform.addEventListener('submit',?send,?false);
????????????}
????????????window.addEventListener('load',?function()?{
?????????new?Sock();
????????????},?false);
????????????
????????????$("#btnGet").click(?function?()?{
?????????????$.get("http://localhost:8080/",?{?q:?"John"},?????????????function(data){
???????????$("#responseTextGet").val($("#responseTextGet").val()?+?data)
?????????????});
????????????});
$("#btnPost").click(?function?()?{
$.post("http://localhost:8080/",??function(data){
$("#responseTextPost").val($("#responseTextGet").val()?+?data)
??});
????????????});
????????});
???????
????????</script>
????</head>
????<body>
????????<h3>输入内容</h3>
????????<form?name="inputform">
????????????<input?type="text"?name="message"?id="message"?placeholder="Enter?text?to?be?sent"?autofocus>
????????????<input?type="submit"?value="发送WebSocket数据">
????????</form>
????????<h3>服务端返回</h3>
????????<textarea?id="responseText"></textarea>
????????<h3>输入内容</h3>
????????<form?name="inputform">
????????????<input?type="text"?name="message"?id="messageGet"?placeholder="Enter?text?to?be?sent"?autofocus>
????????????<input?type="button"?value="Get数据"?id="btnGet">
????????</form>
????????<h3>服务端返回</h3>
????????<textarea?id="responseTextGet"></textarea>
????????<h3>输入内容</h3>
????????<form?name="inputform">
????????????<input?type="text"?name="message"?id="messagePost"?placeholder="Enter?text?to?be?sent"?autofocus>
????????????<input?type="button"?value="Post数据"?id="btnPost">
????????</form>
????????<h3>服务端返回</h3>
????????<textarea?id="responseTextPost"></textarea>
????</body>
</html>

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读