- 浏览: 985420 次
文章分类
- 全部博客 (428)
- Hadoop (2)
- HBase (1)
- ELK (1)
- ActiveMQ (13)
- Kafka (5)
- Redis (14)
- Dubbo (1)
- Memcached (5)
- Netty (56)
- Mina (34)
- NIO (51)
- JUC (53)
- Spring (13)
- Mybatis (17)
- MySQL (21)
- JDBC (12)
- C3P0 (5)
- Tomcat (13)
- SLF4J-log4j (9)
- P6Spy (4)
- Quartz (12)
- Zabbix (7)
- JAVA (9)
- Linux (15)
- HTML (9)
- Lucene (0)
- JS (2)
- WebService (1)
- Maven (4)
- Oracle&MSSQL (14)
- iText (11)
- Development Tools (8)
- UTILS (4)
- LIFE (8)
最新评论
-
Donald_Draper:
Donald_Draper 写道刘落落cici 写道能给我发一 ...
DatagramChannelImpl 解析三(多播) -
Donald_Draper:
刘落落cici 写道能给我发一份这个类的源码吗Datagram ...
DatagramChannelImpl 解析三(多播) -
lyfyouyun:
请问楼主,执行消息发送的时候,报错:Transport sch ...
ActiveMQ连接工厂、连接详解 -
ezlhq:
关于 PollArrayWrapper 状态含义猜测:参考 S ...
WindowsSelectorImpl解析一(FdMap,PollArrayWrapper) -
flyfeifei66:
打算使用xmemcache作为memcache的客户端,由于x ...
Memcached分布式客户端(Xmemcached)
netty 网络通信示例一 :http://donald-draper.iteye.com/blog/2383326
netty 网络通信示例二:http://donald-draper.iteye.com/blog/2383328
netty 网络通信示例三:http://donald-draper.iteye.com/blog/2383392
netty 网络通信示例四:http://donald-draper.iteye.com/blog/2383472
前面文章我们在编码器与解码器的示例,及基于textline编解码器通信示例,今天我们通过
Netty来时实现一个简单的HTTP服务器:
HTTP服务器:
Http服务器处理器Initializer:
Http服务器处理器:
打开浏览器,访问地址:http://192.168.31.153:8080/
浏览器窗口显示Hello world!
netty 网络通信示例二:http://donald-draper.iteye.com/blog/2383328
netty 网络通信示例三:http://donald-draper.iteye.com/blog/2383392
netty 网络通信示例四:http://donald-draper.iteye.com/blog/2383472
前面文章我们在编码器与解码器的示例,及基于textline编解码器通信示例,今天我们通过
Netty来时实现一个简单的HTTP服务器:
HTTP服务器:
package netty.main.http; import java.net.InetSocketAddress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.SelfSignedCertificate; import netty.initializer.http.HttpHelloWorldServerInitializer; /** * An HTTP server that sends back the content of the received HTTP request * in a pretty plaintext form. * * @author donald * 2017年6月30日 * 上午11:44:43 */ public final class HttpHelloWorldServer { private static final Logger log = LoggerFactory.getLogger(HttpHelloWorldServer.class); static final boolean SSL = System.getProperty("ssl") != null; private static final String ip = "192.168.31.153"; static final int port = Integer.parseInt(System.getProperty("port", SSL? "8443" : "8080")); public static void main(String[] args) throws Exception { // Configure SSL. final SslContext sslCtx; if (SSL) { SelfSignedCertificate ssc = new SelfSignedCertificate(); sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build(); } else { sslCtx = null; } // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.option(ChannelOption.SO_BACKLOG, 1024); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new HttpHelloWorldServerInitializer(sslCtx)); InetSocketAddress inetSocketAddress = new InetSocketAddress(ip,port); Channel ch = b.bind(inetSocketAddress).sync().channel(); log.info("=========HttpServer is start========="); System.err.println("Open your web browser and navigate to " + (SSL? "https" : "http") + "://"+ip+":" + port + '/'); ch.closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } }
Http服务器处理器Initializer:
package netty.initializer.http; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.HttpServerExpectContinueHandler; import io.netty.handler.ssl.SslContext; import netty.handler.http.HttpHelloWorldServerHandler; /** * * @author donald * 2017年6月30日 * 上午11:42:49 */ public class HttpHelloWorldServerInitializer extends ChannelInitializer<SocketChannel> { private final SslContext sslCtx; public HttpHelloWorldServerInitializer(SslContext sslCtx) { this.sslCtx = sslCtx; } @Override public void initChannel(SocketChannel ch) { ChannelPipeline p = ch.pipeline(); if (sslCtx != null) { p.addLast(sslCtx.newHandler(ch.alloc())); } p.addLast(new HttpServerCodec()); p.addLast(new HttpServerExpectContinueHandler()); p.addLast(new HttpHelloWorldServerHandler()); } }
Http服务器处理器:
package netty.handler.http; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpUtil; import io.netty.handler.codec.http.HttpRequest; import io.netty.util.AsciiString; import static io.netty.handler.codec.http.HttpResponseStatus.*; import static io.netty.handler.codec.http.HttpVersion.*; public class HttpHelloWorldServerHandler extends ChannelInboundHandlerAdapter { private static final byte[] CONTENT = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' }; private static final AsciiString CONTENT_TYPE = new AsciiString("Content-Type"); private static final AsciiString CONTENT_LENGTH = new AsciiString("Content-Length"); private static final AsciiString CONNECTION = new AsciiString("Connection"); private static final AsciiString KEEP_ALIVE = new AsciiString("keep-alive"); @Override public void channelReadComplete(ChannelHandlerContext ctx) { ctx.flush(); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (msg instanceof HttpRequest) { HttpRequest req = (HttpRequest) msg; boolean keepAlive = HttpUtil.isKeepAlive(req); FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(CONTENT)); response.headers().set(CONTENT_TYPE, "text/plain"); response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes()); if (!keepAlive) { ctx.write(response).addListener(ChannelFutureListener.CLOSE); } else { response.headers().set(CONNECTION, KEEP_ALIVE); ctx.write(response); } } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { cause.printStackTrace(); ctx.close(); } }
打开浏览器,访问地址:http://192.168.31.153:8080/
浏览器窗口显示Hello world!
发表评论
-
netty NioSocketChannel解析
2017-09-29 12:50 1326netty 抽象BootStrap定义:http://dona ... -
netty Pooled字节buf分配器
2017-09-28 13:00 2066netty 字节buf定义:http://donald-dra ... -
netty Unpooled字节buf分配器
2017-09-26 22:01 2457netty 字节buf定义:http://donald-dra ... -
netty 抽象字节buf分配器
2017-09-26 08:43 1322netty 字节buf定义:http:// ... -
netty 复合buf概念
2017-09-25 22:31 1322netty 字节buf定义:http://donald-dra ... -
netty 抽象字节buf引用计数器
2017-09-22 12:48 1602netty 字节buf定义:http://donald-dra ... -
netty 抽象字节buf解析
2017-09-22 09:00 1851netty 通道接口定义:http://donald-drap ... -
netty 资源泄漏探测器
2017-09-21 09:37 1402netty 通道接口定义:http://donald-drap ... -
netty 字节buf定义
2017-09-20 08:31 2845netty 通道接口定义:http://donald-drap ... -
netty 默认通道配置后续
2017-09-18 08:36 2188netty 通道接口定义:http://donald-drap ... -
netty 默认通道配置初始化
2017-09-17 22:51 2043netty 通道接口定义:http://donald-drap ... -
netty 通道配置接口定义
2017-09-17 14:51 1084netty 通道接口定义:http://donald-drap ... -
netty NioServerSocketChannel解析
2017-09-16 13:01 1881netty ServerBootStrap解析:http:// ... -
netty 抽象nio消息通道
2017-09-15 15:30 1223netty 通道接口定义:http:/ ... -
netty 抽象nio字节通道
2017-09-14 22:39 1206netty 通道接口定义:http:/ ... -
netty 抽象nio通道解析
2017-09-14 17:23 961netty 通道接口定义:http://donald-drap ... -
netty 抽象通道后续
2017-09-13 22:40 1316netty Inboudn/Outbound通道Inv ... -
netty 通道Outbound缓冲区
2017-09-13 14:31 2195netty 通道接口定义:http:/ ... -
netty 抽象Unsafe定义
2017-09-12 21:24 1086netty 通道接口定义:http:/ ... -
netty 抽象通道初始化
2017-09-11 12:56 1862netty 管道线定义-ChannelPipeline:htt ...
相关推荐
Netty是一个高性能、异步事件驱动的网络应用框架,常用于构建高效的服务器和客户端应用程序,尤其是在高并发场景下。在本示例中,我们将探讨如何使用Netty实现一个基于HTTP协议的文件服务器。 首先,我们需要理解...
总结来说,“android netty cli +protobuf示例”展示了如何在Android客户端利用Netty的异步网络通信能力和Protobuf的数据序列化特性,构建一个高效的即时通讯系统。这个示例涵盖了从消息定义到网络通信的全过程,...
这个“netty通信完整示例”提供了一套完整的Netty使用案例,包括了jar包、服务器端、客户端、编码器和解码器,确保了你能够亲身体验Netty的强大功能。 首先,让我们深入理解Netty的核心概念: 1. **NIO(Non-...
Netty的HTTP模块允许开发者轻松地构建HTTP服务器和客户端,支持GET、POST等各种请求方法,并且能够处理Cookie和HTTP头部。 接下来是Socket,它是网络编程的基础,Netty的Socket API提供了TCP和UDP的支持。通过使用...
在 "netty-http-server" 文件中,我们可以找到一个使用 Netty 实现的 HTTP 服务器示例,它展示了如何接收和处理 HTTP 请求。而在 "netty-http-client" 文件中,包含了一个简单的 HTTP 客户端示例,演示了如何向...
这通常意味着代码可能包括基础示例,用于演示如何在C#环境中设置Netty客户端和服务器,并实现双向通信,即两个端点都能发送和接收数据。 从文件名称列表来看,我们可以推测项目可能包含以下内容: 1. `UpgradeLog....
Netty是一款高性能、异步事件驱动的网络应用框架,它为Java开发人员提供了构建高性能、稳定、可扩展的网络服务器和客户端的API。在“Netty通信服务器搭建demo”中,我们将探讨如何利用Netty来搭建一个简单的通信...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用 Netty 实现 SSL/TLS(Secure Sockets Layer/Transport Layer Security)...
标题"Java Netty客户端与服务器"表明我们将探讨如何使用Netty构建一个简单的服务器和客户端系统,其中客户端能够发送消息到服务器,而服务器则会给予响应。这种通信模式在许多分布式系统中非常常见,例如聊天应用、...
以下是一个简单的 Netty Promise 示例代码: ```java import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; public ...
压缩包中的 "LIQUIDSOCKETSERVER" 文件可能是Netty服务器的源代码示例,它可能展示了如何处理16进制数据。分析这个代码,我们可以看到Netty如何创建服务器、设置管道、以及如何定义和使用自定义的解码器和编码器来...
在这个示例中,我们将看到如何将Netty作为HTTP服务器,与Spring Boot的Web服务功能相结合。首先,你需要在Spring Boot项目中引入Netty的相关依赖。接着,创建一个自定义的`ChannelInboundHandler`,这是Netty中的...
1. **服务器端**:使用Netty构建一个HTTP服务器,监听特定端口,接收HTTP请求。服务器端会解析HTTP请求,然后将请求体中的Protobuf数据解码为Java对象。 2. **客户端**:Netty的HTTP客户端发送HTTP请求到服务器,...
Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用程序框架,专为开发协议服务器和客户端而设计。它的核心是基于 NIO(非阻塞 I/O...在 "netty-4.1" 的文档和示例代码中,你会找到更多关于这些主题的详细信息。
以下是一个简单的Netty服务器构建示例: ```java public class NettyServer { public static void main(String[] args) throws Exception { // 创建BossGroup和WorkerGroup EventLoopGroup bossGroup = new ...
在本文中,我们将深入探讨如何利用 Netty 构建一个 HTTP 代理服务器,以及它的工作原理和核心组件。 HTTP 代理服务器的作用是作为客户端与目标服务器之间的中介,接收客户端的请求,转发到目标服务器,并将服务器的...
在这个"Netty框架,服务端、客户端代码示例"中,我们将深入探讨如何使用Netty构建服务端和客户端的通信。 首先,让我们了解Netty的基本架构。Netty的核心是它的“线程模型”和“通道”概念。线程模型采用“事件循环...
5. **文件服务器示例** - 在描述中提到的代码示例可能是一个简单的文件服务器,服务器接收到 GET 请求时,会查找请求的资源路径对应的实际文件,然后读取文件内容作为响应主体。 - 通过 `FileRegion` 类可以方便地...
Java物联网的Netty服务器是一种基于Java的高性能网络应用框架,主要应用于开发高并发...通过深入学习和实践这个项目,开发者可以掌握利用Netty构建物联网服务器的关键技术,为构建高效、可靠的物联网应用打下坚实基础。
总的来说,这个项目提供了从零开始构建一个RTMP服务器的参考,可以帮助开发者深入理解RTMP协议以及如何利用Netty构建高性能的网络服务。通过学习和研究这个项目,开发者可以掌握网络编程、实时流媒体传输以及服务器...