$home=org.apache.mina
启动过程中,主要业务开始于
$home.core.polling.AbstractPollingIoAcceptor.Acceptor
线程类监听,
case1:未初始化server,进行绑定初始化
具体绑定代码在
$home.transport.socket.nio.NioSocketAcceptor.open(SocketAddress localAddress){
channel.configureBlocking(false);
//部分代码
ServerSocketChannel channel = ServerSocketChannel.open();
ServerSocket socket = channel.socket();
socket.setReuseAddress(isReuseAddress());
socket.bind(localAddress, getBacklog());
channel.register(selector, SelectionKey.OP_ACCEPT);
}
case2:clent的其他事件
$home.polling.AbstractPollingIoAcceptor.Acceptor.processHandles(Iterator<H> handles){
A.获取session
S session = accept(processor, handle);
B.初始化session
initSession(session, null, null);
C.启动线程处理事件
session.getProcessor().add(session);
}
A中accept方法调用
$home.transport.socket.nio.NioSocketAcceptor.accept(IoProcessor<NioSession> processor, ServerSocketChannel handle){
SelectionKey key = handle.keyFor(selector);
// 部分代码
SocketChannel ch = handle.accept();
return new NioSocketSession(this, processor, ch);
}
C中add方法会调用
$home.core.polling.AbstractPollingIoProcessor.startupProcessor(){
//D
Processor processor = processorRef.get();
//部分代码,启动新线程处理事件
if (processor == null) {
processor = new Processor();
if (processorRef.compareAndSet(null, processor)) {
executor.execute(new NamePreservingRunnable(processor, threadName));
}
}
}
D处的Processor是内部类$HOME.polling.AbstractPollingIoProcessor.Processor.
是一个线程类,其中主要业务方法
read(S session){
//部分代码
IoSessionConfig config = session.getConfig();
//用到了启动server时的session配置
int bufferSize = config.getReadBufferSize();
IoBuffer buf = IoBuffer.allocate(bufferSize);
final boolean hasFragmentation = session.getTransportMetadata().hasFragmentation();
try {
int readBytes = 0;
int ret;
try {
if (hasFragmentation) {
while ((ret = read(session, buf)) > 0) {
readBytes += ret;
if (!buf.hasRemaining()) {
break;
}
}
} else {
ret = read(session, buf);
if (ret > 0) {
readBytes = ret;
}
}
} finally {
buf.flip();
}
//有内容,依次调用配置的filter
if (readBytes > 0) {
IoFilterChain filterChain = session.getFilterChain();
filterChain.fireMessageReceived(buf);
buf = null;
if (hasFragmentation) {
if (readBytes << 1 < config.getReadBufferSize()) {
session.decreaseReadBufferSize();
} else if (readBytes == config.getReadBufferSize()) {
session.increaseReadBufferSize();
}
}
}
}
分享到:
相关推荐
在"minaServer.rar"和"minaClient.rar"这两个压缩包中,分别包含了服务端和客户端的源代码示例。通过学习和运行这些示例,你可以深入了解MINA如何工作,以及如何利用MINA快速开发自己的网络应用。在实际项目中,可以...
《mina mmorpg服务端源码解析》 在游戏开发领域,尤其是大型多人在线角色扮演游戏(MMORPG)的设计与实现中,服务端源码扮演着至关重要的角色。"mina mmorpg服务端源码"是一个专注于游戏服务器端开发的项目,其核心...
描述中的"直接导入Eclipse项目即可"意味着这个压缩包包含了一个完整的Eclipse项目结构,包括必要的源代码文件、配置文件以及可能的依赖库。开发者无需进行复杂的设置,只需将项目导入到Eclipse中,就可以编译和运行...
本压缩包包含的是使用Mina Server开发的服务端和客户端的源代码示例,非常适合初学者和有经验的开发者用来学习和参考。 服务端开发: 在Mina中,服务端通常通过创建一个Acceptor来监听特定的端口,等待客户端的连接...
mina新手案例,mina新手教程源码 mina+springboot最简单的案例。用的IDEA * mina服务端 * 1、添加@Controller注解和 @PostConstruct注解,代表... * 2、如果不想启动springboot,可以单独运行mina服务端的main方法。
“服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)” 这个标题表明这是一个使用MINA2框架在服务端实现的UDP(User Datagram Protocol)双向通信的示例代码。MINA2是一个开源的Java网络应用程序框架,它简化了...
在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...
8. **编译与运行**:在获取到MINA的源代码后,通常需要通过Maven或Gradle等构建工具来编译和打包项目,然后通过Java命令运行生成的可执行文件,启动MINA服务端。 9. **调试与测试**:在开发过程中,可以使用MINA...
【标题】:“一个源代码学习服务端,基于Mina” Mina(JavaMinimal Asynchronous Network Library)是一个开源的网络通信框架,由Apache软件基金会维护。它提供了高度可扩展且低级别的网络应用程序接口,用于构建高...
1. 创建一个`IoAcceptor`实例,它是MINA服务端的核心组件,用于监听客户端的连接请求。通常我们会选择`NioSocketAcceptor`,因为它基于Java NIO实现。 2. 定义一个`ProtocolDecoder`和`ProtocolEncoder`,用于解码...
这个名为"Minademo"的压缩包文件可能包含了实现上述功能的源代码和相关文档。解压后,可以通过阅读代码和文档来了解具体实现细节,以便于理解和学习如何在实际项目中运用Mina实现长连接的客户端和服务端。 总的来说...
1. **源代码**:MINA服务端的Java源代码,通常会包括一个或多个`Handler`类,这些类是MINA的核心部分,处理网络事件和数据传输。例如,`EchoHandler`可能会实现简单的回显服务,接收客户端发送的数据并原样返回。 2...
2. **服务端入口类**:启动Mina服务器的Java类,通常会包含Spring容器的初始化和网络监听端口的设置。 3. **业务处理器**:实现了Mina的IoHandler接口,处理来自客户端的事件和数据。 4. **协议编码解码器**:用于将...
通过阅读和分析`apache-mina-2.0.16`的源码,我们可以深入理解MINA的设计思想,学习如何构建高效的网络服务,并能根据自己的需求定制和扩展MINA的功能。对于想要从事网络编程或系统架构设计的开发者来说,研究MINA...
我是个新手,有出错的地方莫怪哈,把源码发布出来更多的是想大伙帮忙改进下框架,改进的代码和新版本希望能够发到我的邮箱:xiamiy01@gmail.com,我会把新的修改和新版本发布出来,为大家服务。 文件夹简介: ...
4. **Service启动与配置**: 源代码中应包含如何创建和启动MINA服务的代码。这通常涉及到设置服务器端口、配置IoAcceptor、添加过滤器到过滤器链,以及绑定IoHandler。 5. **Client连接**: 如果源代码包含了客户端...
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了简单的API,使得开发者能够专注于应用逻辑,而不是底层的网络编程细节。在本压缩包"apache-mina-2.0.4"中,包含...
7. **项目结构**:这个项目可能包含了服务端和客户端的源代码,以及必要的配置文件。服务端代码中会有创建`NioServerSocketConnector`,注册事件处理器,启动服务器的逻辑。客户端代码则包含创建`NioSocketConnector...
- 阅读源代码,了解如何初始化Mina服务器,设置监听端口,创建过滤器链,以及处理网络事件。 - 运行服务端并用UDP客户端发送数据,观察服务器如何回显接收到的数据,以验证其功能。 - 修改过滤器链,添加自己的业务...
标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...