mina后面的业务处理是一个线程池去处理的,在线程池的多线程的情况下,一般是不能保证后面的请求一定后处理的。因为可能后面的线程处理更快。
mina是怎么做到的呢:
基本原理是 每个session有个自己的queue,而且相同这个queue的元素一定在同一个线程处理
具体原理:
mina使用的是OrderedThreadPoolExecutor,具体的处理是Worker
for (;;) {
IoSession session = fetchSession();
idleWorkers.decrementAndGet();
if (session == null) {
synchronized (workers) {
if (workers.size() > getCorePoolSize()) {
// Remove now to prevent duplicate exit.
workers.remove(this);
break;
}
}
}
if (session == EXIT_SIGNAL) {
break;
}
try {
if (session != null) {
runTasks(getSessionTasksQueue(session));
}
} finally {
idleWorkers.incrementAndGet();
}
}
IoSession session = fetchSession(); 拿到session
runTasks(getSessionTasksQueue(session)); 运行session对应queue的任务
private void runTasks(SessionTasksQueue sessionTasksQueue) {
for (;;) {
Runnable task;
Queue<Runnable> tasksQueue = sessionTasksQueue.tasksQueue;
synchronized (tasksQueue) {
task = tasksQueue.poll();
if (task == null) {
sessionTasksQueue.processingCompleted = true;
break;
}
}
eventQueueHandler.polled(OrderedThreadPoolExecutor.this, (IoEvent) task);
runTask(task);
}
}
synchronized (tasksQueue) 可以看到执行任务的时候是锁住sesssion的queue的,这个时候是不能添加任务的,所以可以保证同一个queue的任务是在同一个线程执行的,
(ps:worker 可以理解为一个线程)
分享到:
相关推荐
当客户端发起连接请求时,服务器端的`Acceptor`会创建一个新的`Session`对象,然后将其绑定到对应的`SessionHandler`上。在`SessionHandler`中,我们可以设置心跳机制来检测连接是否活跃,防止因网络问题导致的连接...
Mina的IoHandler接口需要实现,用于处理接收到的网络事件。 4. **编写IoHandler**:IoHandler是Mina的核心组件,负责处理网络连接的建立、数据的读写以及连接的关闭等事件。在这个项目中,IoHandler应该能够解析从...
在服务端,接收到请求后,调用对应的服务实现方法,然后将结果返回给客户端。 通过上述步骤,我们可以构建一个基于Mina的RPC系统。这个例子中的链接...
2. **MINA Server端实现**:在MINA中,Server端主要负责监听指定的端口,接收到客户端连接请求后,创建一个Session对象来代表与该客户端的连接。Server端可以通过自定义的Filter(过滤器)来处理进来的数据,如解码...
Apache Mina是一个开源的网络通信框架,常用于构建高性能、高效率的服务端应用程序,尤其在Java平台上。在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina...
在接收到连接请求后,会创建一个新的Session,并添加一系列的过滤器。服务器还需要处理Session的打开、关闭、异常等事件,以及通过Session进行数据传输。 2. Client端:客户端可能使用Flash或其他技术实现,与...
### 基于Apache Mina实现的TCP长连接和短连接实例 #### 一、引言 Apache Mina是Apache组织推出的一款优秀的网络应用程序框架,它的全称是Multipurpose Infrastructure for Network Applications(多用途网络应用...
- MINA服务端的核心组件是Acceptor,它负责监听指定的端口,当有新的客户端连接请求时,Acceptor会创建一个新的Session来处理这个连接。 - Session是MINA中的关键概念,代表一个与客户端的连接。它包含了与连接...
过滤器可以对数据进行预处理、后处理,实现如日志记录、性能监控等功能。 在**Mina客户端服务器Demo**中,你可以看到以下关键部分: - **服务器端**:首先,服务器会创建一个Acceptor,监听指定端口的连接请求。...
5. **关闭连接**:处理完请求后,记得关闭连接以释放资源。 通过以上步骤,你就可以使用Apache Mina构建一个基本的HTTP服务器和客户端。当然,实际应用中可能需要处理更复杂的场景,比如并发连接管理、SSL/TLS加密...
当连接建立后,客户端可以通过Session发送数据到服务器,并接收服务器的响应。 在这个DEMO中,我们还可以期待看到如何处理MINA的事件模型。MINA使用I/O事件驱动模型,常见的事件有连接建立(sessionCreated)、数据...
- 实现IoHandler接口,定义服务器接收到消息后的处理逻辑。 - 启动Acceptor,开始监听客户端连接。 2. **创建客户端**: - 初始化Connector,指定要连接的服务器地址和端口。 - 设置IoHandler,定义客户端发送...
当客户端连接建立后,Mina 将自动创建一个新的 Session 对象。 6. **Client 端实现** 在 `socket_client` 文件夹中,源代码将展示如何建立到 Mina 服务器的连接。客户端同样需要配置过滤器链和协议处理器,然后...
Filter链模式使得我们可以添加自定义的处理逻辑,对进出门数据进行预处理或后处理。 **2. Spring与Mina的整合** 在Spring中整合Mina,首先需要在Spring配置文件中声明Mina的相关bean,如Acceptor、...
在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。在这个"Mina开发实例(服务端、客户端)DEMO"中,我们将深入探讨Mina如何实现长连接通讯。 首先,我们来...
1. **异步事件驱动**:MINA采用非阻塞I/O模型,即NIO(New IO)模式,通过Selector监听多个通道(Channel)的事件,如连接请求、数据读写等,提高了服务端处理大量并发连接的能力。 2. **生命周期管理**:MINA提供...
4. **服务端实现**:服务端同样基于MINA,通过ServerBootstrap配置Acceptor,监听端口,接收到客户端连接请求后,创建Session。服务端可以注册监听器来处理客户端的连接、断开、数据到达等事件,实现推送服务的逻辑...
服务端接收到连接请求后,会创建一个对应的Session实例。当接收到数据时,Mina会调用预先设置的事件处理器(通常是IoHandler)来处理接收到的字符串。在这里,我们可以解析这个字符串,执行相应的业务逻辑,比如根据...
《mina2实现Socket通信调用远程方法详解》 在当今的分布式系统中,远程方法调用(Remote Method Invocation,RMI)是常见的通信方式之一,它允许程序在不同的网络节点间透明地调用方法,极大地简化了分布式应用的...