专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Netty 传输

Netty 为每种传输的实现都暴露了相同的API,所以无论选用哪一种传输的实现,你的代码都仍然几乎不受影响。在所有的情况下,传输的实现都依赖于 interface Channel 、ChannelPipeline 和 ChannelHandler。

传输 API 的核心是 interface Channel,它被用于所有的I/O操作。

每个 Channel 都将会被分配一个 ChannelPipeline 和 ChannelConfig。ChannelConfig 包含了该 Channel 的所有配置设置,并且支持热更新。由于特定的传输可能具有独特的设置,所以它可能会实现一个 ChannelConfig 的子类型。

由于 Channel 是独一无二的,所以为了保证顺序将 Channel 声明为 java.lang.Comparable 的一个子接口。因此,如果两个不同的 Channel 实例都返回了相同的散列码,那么 AbstractChannel 中 compareTo() 方法的实现将会抛出一个 Error。

ChannelPipeline 持有所有将应用于入站和出战数据以及事件的 ChannelHandler 实例,这些 ChannelHandler 实现了应用程序用于处理状态变化以及数据处理的逻辑。

ChannelHandler 的典型用途包括:

  • 将数据从一种格式转换为另一种格式;
  • 提供异常的通知;
  • 提供 Channel 变为活动的或者非活动的通知;
  • 提供当 Channel 注册到 EventLoop 或者从 EventLoop 注销时的通知;
  • 提供有关用户自定义事件的通知。

ChannelPipeline 实现了一种常见的设计模式——拦截过滤器(Intercepting Filter)。

你也可以根据需要通过添加或者移除 ChannelHandler 实例来修改 ChannelPipeline。通过利用 Netty 的这项能力可以构建出高度灵活的应用程序。例如,每当 STARTTLS 的协议请求时,你可以简单地通过向 ChannelPipeline 添加一个适当地 ChannelHandler (SslHandler) 来按需地支持 STARTTLS 的协议。

Channel 的方法:

  • eventLoop:返回分配给 Channel 的 EventLoop
  • pipeline:返回分配给 Channel 的 ChannelPipeline
  • isActive:如果 Channel 是活动的,则返回 true。活动的意义可能依赖于底层的传输。例如,一个 Socket 传输一旦连接到了远程节点便是活动的,而一个 Datagram 传输一旦被打开便是活动的。
  • localAddress:返回本地的 SocketAddress
  • remoteAddress:返回远程的 SocketAddress
  • write:将数据写到远程节点。这个数据将被传递给 ChannelPipeline ,并且排队直到它被冲刷
  • flush:将之前已写的数据冲刷到底层传输,如一个 Socket
  • writeAndFlush:一个简便的方法,等同于调用 write() 并接着调用 flush()

文章永久链接:https://tech.souyunku.com/18514

未经允许不得转载:搜云库技术团队 » Netty 传输

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们