Jetty架构设计之Connector、Handler组件

本文详细解析Jetty的Connector组件与Handler体系,包括Acceptor、SelectorManager、ManagedSelector、EndPoint和Connection的工作流程。Handler作为Jetty处理Servlet请求的核心,包括协调Handler、过滤器Handler和内容Handler的角色,实现请求的路由、过滤和具体处理。
摘要由CSDN通过智能技术生成

Acceptor通过阻塞方式接受连接。

public void accept(int acceptorID) throws IOException

{

ServerSocketChannel serverChannel = _acceptChannel;

if (serverChannel != null && serverChannel.isOpen())

{

// 这里是阻塞的

SocketChannel channel = serverChannel.accept();

// 执行到这里时说明有请求进来了

accepted(channel);

}

}

接受连接成功后会调用accepted,将SocketChannel设置为非阻塞模式,然后交给Selector去处理。

private void accepted(SocketChannel channel) throws IOException

{

channel.configureBlocking(false);

Socket socket = channel.socket();

configure(socket);

// _manager是SelectorManager实例,里面管理了所有的Selector实例

_manager.accept(channel);

}

SelectorManager


Jetty的Selector由SelectorManager类管理,而被管理的Selector叫作ManagedSelector。SelectorManager内部有一个ManagedSelector,真正的打工人。

每个ManagedSelector都有自己的Selector,多个Selector可以并行管理大量的channel,提高并发,连接请求到达时采用Round Robin的方式选择ManagedSelector。

public void accept(SelectableChannel channel, Object attachment)

{

//选择一个ManagedSelector来处理Channel

final ManagedSelector selector = chooseSelector();

//提交一个任务Accept给ManagedSelector

selector.submit(selector.new Accept(channel, attachment));

}

SelectorManager从本身的Selector数组中选择一个Selector来处理这个Channel,并创建一个任务Accept交给ManagedSelector,ManagedSelector在处理这个任务主要做了两步:

  1. 调用Selector#register把Channel注册到Selector上,拿到一个SelectionKey

_key = _channel.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值