ActiveJ框架学习——Async I/O之Net

2021SC@SDUSC

概述

Netty、Apache Mina 和其他类似高性能网络解决方案的便捷高效替代方案。用于 AsyncTcpSocket 和 AsyncUdpSocket 的 Eventloop 和 Java NIO 适配器之上的一个小抽象层

 特点

  • 支持 Promises 进行读写操作
  • 与 CSP ChannelSupplier 和 ChannelConsumer 的兼容性 AsyncTcpSocket 可以用作具有内置背压传播的 CSP 通道,并且可以插入到 CSP/Datastream 管道及其所有功能(如缓冲、压缩、序列化/反序列化、数据转换、数据过滤、减少等)
  • 广泛优化,几乎没有性能开销,广泛使用ByteBufPool

 什么是Asynchronous sockets?

具有 TLS 支持的完全异步 TCP 套接字。允许向/从网络发送/接收数据。可用作创建自定义 TCP 服务器/客户端或实现自定义网络协议的构建块。 Socket 有一个非常简单和直观的 API,它由读/写方法组成。 CSP 模块可用于将套接字包装到 ChannelSupplier 或 ChannelConsumer 还有一个用于 UDP 通信的异步 UDP 套接字。

源代码如下图所示:

 我们将主要展开对AbstractSever类的讨论。

AbstractServer 类作为构建事件循环感知 TCP 服务器(HTTP 服务器、RPC 服务器、TCP 文件服务等)的基础,它具有以下特点:

  • 支持开始/停止语义
  • 实现了 EventloopServer
  • 实现了 WorkerServer 接口,所以 AbstractServer 的所有子类都可以很容易地用作工作服务器
  • 支持 ServerSocketSettings 和 SocketSettings

 即用型 PrimaryServer 实现,在主 Eventloops 中作为平衡器工作。它接受外部“接受”请求并将它们重新分配给 WorkerServers,然后在其相应的工作 Eventloop 线程中执行实际的“接受”请求。

它是一个在事件循环之上工作的非阻塞服务器。因此,它在 eventloop 线程中运行,并且所有事件都在该线程上触发。这只是 eventloop 调用的高级包装。

因为该类主要是对EventloopServer的实现,且其中并没有新增的方法,所以我们去查看EventloopServer接口的定义。

EventloopSever表示非阻塞服务器,它侦听新连接并异步接受它们。它在事件循环线程中操作事件循环,并使用与 Java NIO 的事件循环集成。

其代码部分如下:

public interface EventloopServer {
	Eventloop getEventloop();

	void listen() throws IOException;

	Promise<?> close();
}

 可以看到,EventloopServer接口里面一共只有三个方法。

它们的作用分别为:

  • getEventloop():获取Eveneloop;
    
  •  listen():告诉此服务器开始侦听其侦听地址。如果无法创建套接字,则抛出异常IOException;
  • close():关闭服务器。(任何开放的渠道都将关闭)

 此外,除了EventloopSever接口外,还有WorkerSever接口。这是一个可以在 PrimaryServer 中使用的服务器接口。 它应该是基于事件循环的并且应该能够接受和管理客户端连接。

代码部分如下:

public interface WorkerServer {
	Eventloop getEventloop();

	void doAccept(SocketChannel socketChannel, InetSocketAddress localAddress, InetSocketAddress remoteAddress,
			boolean ssl, SocketSettings socketSettings);
}

最后,看一下net中的两个类,PrimarySever和SimpleSever

PrimarySever:

       它是一个简单的平衡器服务器,它将其连接分派到其 WorkerServer。

       当传入连接发生时,它使用循环算法将请求转发给其中之一。

SimpleSever:

       这是 AbstractServer类 的基本实现,它只是将每个客户端连接(AsyncTcpSocket acync)分派给给定的消费者。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值