MINA 网络架构:
客户端到服务器端之间的交互流程
从线程的角度梳理一下,总共有三类线程:
一、IoAcceptor 监听线程
这里有一个线程池,每监听一个端口,从线程池中拿一个线程监听
二、IoProcessor IO处理线程
当监听线程监套接字上有连接请求时,从IOProcessor线程池中拿一个线程来处理IO,线程数都是有限制,当池子中没有空闲的线程,那么这个请求就会丢在堵塞队列中排队,等待空闲线程
三、]IoHandler 业务处理线程
这个是可选的,我目前接触到的游戏都是没单独配置,也就是跟上面是同一个线程池
消息识别(也就是消息接收)步骤,1、将网络中收到的数据放到IOBUFFER缓冲区中 2、尝试从当前缓冲区中识别消息,这个是重复的过程,如果消息未到就会重复步骤1 3、消息识别出来并且数据全部到达,然后根据消息定义的规则读取消息,贴一个咱们游戏中的实现:
你如果有服务器代码的话是GameDecoder.java这个类
服务器消息发送给客户端:
这个是GameEncoder.java
消息的识别和发送都是在IO线程池中处理的。
另外,一般大型MMORPG游戏会将识别的消息放到各种线程组中去处理。比如,登录消息放到登录线程组,场景线程组,聊天线程组等等。这些线程是游戏业务的范畴,跟mina的线程是两回事。
网友评论