摘要:
考虑一个场景:如何实现网页版的聊天程序? 不同于Socket的聊天程序 在以往的http1.0,http1.1当中,是没法实现长连接的。 没出现Websocket之前,采用的是一种轮询的方式,如Comet技术。 术语实时Web:利用技术和实践,使用户在信息的作者发布信息之后就能够立即收到信息,而不需 阅读全文
摘要:
心跳检测应用场景:在集群内节点与节点之间互相感知彼此是否存活。 为什么需要心跳检测?netty不是提供断开连接的回调方法么? 在app的应用场景中,手机如果开飞行模式或者强制关机,服务端是感知不到tcp长连接已经关闭的,这时候就需要服务端向客户端发送心跳包来检测连接是否已经断开。 netty除了提供 阅读全文
摘要:
Socket服务器 Netty作为Socket服务器,需要编写服务端和客户端,服务器端和客户端收发消息通过自定义的Handler.channelRead0方法来交互,客户端连接上服务器后,需要在active时向服务器发送一条消息来触发服务器的行为。 服务端实现 客户端实现 Socket实现的聊天程序 阅读全文
摘要:
netty作为http服务器的服务端代码清单,实际开发中可拆分为netty自带的处理器initializer,自定义处理器handler两种,便于区分。 服务端实现 网站图标 浏览器会先查找网页所在目录是否存在名为favicon.ico的文件,如不存在则去网站根目录再次查找,若再找不到则认为不存在。 阅读全文
摘要:
解码器 实现了 ChannelInBoundHandler 将字节解码为消息 : ByteToMessageDecoder 和 ReplayingDecoder 将一种消息解码为另一种 : MessageToMessageDecoder 编码器 将消息编码为字节:MessageToByteEncod 阅读全文
摘要:
Bootstrap启动类层次结构: 为什么引导类是 Cloneable 的 ?你有时可能会需要创建多个具有类似配置或者完全相同配置的Channel。为了支持这种模式而又不 需要为每个Channel都创建并配置一个新的引导类实例,AbstractBootstrap被标记为了 Cloneable 。在一 阅读全文
摘要:
线程模型确定了代码的执行方式 早起Java语言中,我们使用多 线程处理的主要方式无非是按需创建和启动新的 Thread 来执行并发的任务单元——一种在高 负载下工作得很差的原始方式。 。Java 5 随后引入了 Executor API,其线程池通过缓存和重用 Thread极大地提高了性能。 基本的 阅读全文
摘要:
ChannelHandler 接口 ChannelInBoundHandler接口 SimpleChannelInBoundHandler 会自动释放资源,调用了 ReferenceCountUtil.release(msg); ChannelOutBoundHandler接口 可按需推迟操作和事件 阅读全文
摘要:
两个组件 ByteBuf ByteBufHolder 使用模式 1.堆缓冲区 backing array模式 直接缓冲区的内容将驻留在常规的会被垃圾回收的堆之外。 为了举例说明,让我们考虑一下一个由两部分——头部和主体——组成的将通过 HTTP 协议传输的消息。这两部分由应用程序的不同模块产生,将会 阅读全文
摘要:
Channel的接口层次结构 ChannelConfig:包含Channel的所有设置,支持热更新,特定的传输可能实现ChannelConfig的子类型 ChannelPipeline:拥有所有入站和出站的ChannelHandler实例。 Channel的重要方法 多线程同时写Channel的例子 阅读全文
摘要:
Java原生阻塞IO Java原生NIO nio:选择并处理状态的变化 只有NIO和Epoll支持零拷贝 针对于Linux,自Linux内核版本 2.5.44后,引入epoll——一个高度可扩展的I/O事件通知特性,提供了比旧的POSIX select和poll系统调用更好的性能,Linux JDK 阅读全文
摘要:
Netty是一款异步的事件驱动的网络程序应用框架,支持快速的开发可维护性的高性能的面向协议的服务器和客户端。Netty优雅的处理了网络编程,多线程处理和并发领域的问题。 包含的功能模块: 传输服务:Socket和数据报,Http隧道,VM管道协议:Http和WebSocket,SSL安全套接字,压缩 阅读全文