Practical Netty (6) HTTP Server/Client
- 作者:柳大·Poechant(钟超)
- 邮箱:zhongchao.ustc#gmail.com(# -> @)
- 博客:Blog.CSDN.net/Poechant
- 微博:weibo.com/lauginhom
- 产品:Club http://whatsclub.cn
- 日期:June 18th, 2012
Netty 提供的 HTTP 功能,比较适合在 Netty 搭建的 TCP 或 UDP 服务器上做一些专用的 HTTP 服务,而非一般性的通用 HTTP 服务器。所以不要将 Netty 的自行实现的 HTTP 服务器的易用性与现有 Nginx、Lighttpd 等来比较。
1 HTTP Server
主要不同就是 Pipeline 用什么 handlers,以及我们自定义的 handler 如何处理 HttpRequest,并生成相应的 HttpResponse。
public class ServerPipelineFactory implements ChannelPipelineFactory {
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new PoechantRequestHandler());
return pipeline;
}
}
如何接收 request?如何解析 request?如何产生 response?就看下面的 request handler。
public class PoechantRequestHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
System.out.println("channel connected...");
super.channelConnected(ctx, e);
}
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
HttpRequest request = (HttpRequest) e.getMessage();
System.out.println(
"request length: " +
((HttpRequest) e.getMessage()).getContent().readableBytes());
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
response.setContent(ChannelBuffers.copiedBuffer("I'm a response", CharsetUtil.UTF_8));
response.setHeader(CONTENT_TYPE, "text/plain; charset=UTF-8");
e.getChannel().write(response).addListener(ChannelFutureListener.CLOSE);
}
}
在 Response 中 还可以设置其他的 Headers:
response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, 123);
response.setHeader("Content", "keep-alive");
还有一些 Headers 相关的 Name 和 Value,可以在HttpHeaders.Names
和HttpHeaders.Values
中找到。
2. HTTP Client
ClientBootstrap 一旦连接成功,就可以发送 HttpRequest 了,连接的代码实例如下:
Channel channel =
cb.connect(
new InetSocketAddress("10.0.0.110", 9980)).awaitUninterruptibly().getChannel();
如上是一个阻塞式的连接方式,在连接确认成功或失败前,会一直 block 在那里。异步的方式则如下:
ChannelFuture future = cb.connect(new InetSocketAddress("10.0.0.110", 9980));
Channel channel = future.getChannel();
然后就可以用这个 channel 发消息了。如果是异步的,则要监听成功之后再发送。
future.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
// send a request to the http server
}
});
然后就可以发送数据了。如果是异步的,
HttpRequest request =
new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/docs/index.html");
request.addHeader(HttpHeaders.Names.HOST, "10.0.0.110");
channel.write(request).awaitUninterruptibly().getChannel().getCloseFuture().awaitUninterruptibly();
当然你也可以异步发送。
channel.write(request);channel.write(request);
-
Club 产品官网:http://whatsclub.cn 年轻人的兴趣俱乐部(社区)
转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant,微博:weibo.com/lauginhom
-
相关推荐
利用netty实现Modbus TCP client/server READ COILS | 0x01 READ DISCRETE INPUTS | 0x02 READ HOLDING REGISTERS | 0x03 READ INPUT REGISTERS | 0x04 WRITE SINGLE COIL | 0x05 WRITE SINGLE REGISTER | 0x06 ...
reactor-netty, TCP/HTTP/UDP 客户机/服务器,带有联网的反应器 反应器联网 http://projectreactor.io/docs/netty/release/api/在软件许可证 2.0许可,,,。
在 "netty-http-server" 文件中,我们可以找到一个使用 Netty 实现的 HTTP 服务器示例,它展示了如何接收和处理 HTTP 请求。而在 "netty-http-client" 文件中,包含了一个简单的 HTTP 客户端示例,演示了如何向...
在这个"Netty框架各种通信C/S端"的资源中,包含了使用Netty实现客户端(Client)和服务器(Server)通信的实例。 1. **TCP通信**: TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的...
基于Netty实现的MQTT客户端_netty-mqtt-client
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用 Netty 实现 SSL/TLS(Secure Sockets Layer/Transport Layer Security)...
Netty (netty-netty-5.0.0.Alpha2.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
netty+proto client和server连接登录demo。 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在Java世界中,Netty因其高效性、灵活性和丰富的特性集而备受推崇。SSL(Secure Sockets Layer)和TLS...
在这个“udp server client demo”中,我们将探讨如何实现一个简单的UDP服务器和客户端通信模型。 1. UDP服务器端: - 服务器端首先需要绑定一个特定的IP地址和端口号,以便接收来自客户端的数据。在编程中,这...
在这个"SocketIO-NettyClient&Server.zip"压缩包中,包含了一个使用Java和Netty实现的服务器端和客户端通信的示例。下面将详细解释相关知识点。 1. **Netty框架**: - Netty是一个开源的异步事件驱动的网络应用...
在本文中,我们将深入探讨Netty 4.0的学习笔记,特别是关于Server与Client之间的通信机制。 首先,我们要理解Netty的核心概念——NIO(非阻塞I/O)。Netty基于Java NIO库构建,它提供了更高级别的API,简化了多路...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在Android平台上,使用Netty可以构建高效、可靠的网络通信应用,尤其是在需要处理大量并发连接时。本项目提供...
赠送jar包:transport-netty4-client-5.5.1.jar; 赠送原API文档:transport-netty4-client-5.5.1-javadoc.jar; 赠送源代码:transport-netty4-client-5.5.1-sources.jar; 赠送Maven依赖信息文件:transport-netty...
Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming
在IT行业中,Netty是一个非常流行的高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。在这个场景中,我们关注的是如何使用Netty来实现服务端支持SSL协议,以便实现WebSocket...
一个基于netty实现的servlet容器,可以很好的与springboot集成(jdk1.8 +) 作者邮箱: github地址: : 使用方法 1.添加依赖,在pom.xml中加入 <groupId>com.github.wangzihaogithub</groupId> <artifactId>...
TFTP协议是基于UDP的简单文件传输协议,协议双方为Client和Server.Client和Server之间通过5种消息来传输文件,消息前两个字节Code是消息类型,消息内容随消息类型不同而不同。传输模式有三种:octet,netascii和mail,...
赠送jar包:transport-netty4-client-6.3.0.jar; 赠送原API文档:transport-netty4-client-6.3.0-javadoc.jar; 赠送源代码:transport-netty4-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:transport-netty...