游戏服务器Mina框架开发
作者:老九—技能大黍
交际:知乎
大众号:老九书院(新人有惊喜)
特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权
前言
假定要运用Java言语来开发游戏服务器,那么Mina结构是名副其实的首要。
什么是Mina
Mina是一个开源的网络运用结构,这种结构帮助运用程序员方便的开端出高性能ios14、高并发处理的网络运用。Mina结构运用Java NI封tcp/ip四层模型装了TCP/IP和UDP/IP协议,封装效果体现根据作业的异步API给运用程序员运用。
因而,Mina又被叫做:NIO结构库、C/S结构库或许网络套接字库。
根据mitcp/ip参阅模型分为哪几层na结构有扩展的服务ios模拟器器架构图:Asyncweb、FtpServer和SSHd服务器。
Mina的功用
Mina供给了常用如下功用:
- 为各种传输类型的供给一同的API接口
- 运用Java NI实例化数组O技能的TCP/IP和UDP/IP
- 运用RXTX的串行化通讯(R架构师S232)
- In-VM管道通讯
- 自界说的结束为各种传输类型的供给一同的API接口
- 相似Servlet技能过滤器的Fitler接实例化口
- 低阶和高阶API
- 运用ByteBuffers低阶API
- 运用自界说音讯政策的高阶API
- 高级自界说线程模型
- 单线程
- 单个线程池
- 多个线程池
- 经过StreamIoHandler支iOS持基本的IO流
服务端代码演示
package com.mr.game.server.app;
import java.util.Date;
import org.apache.mina.core.session.IdleStatus;
import org.apac实例化类he.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.架构图用什么软件做session.IoSession;
publicios14桌面布局图片 class TimeServerHandler extends IoHandlerAdapter{
public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
{
cause.printStios下载ackTrace();
}
public void messageReceived( IoSession session, Object mes实例化数组sage ) throws Exception
{
String str = message.toString(ios14);
if( str.trim().equalsIgtcp/ip是因特网的什么noreCase("架构图制造quit") ) {
session.close();
return;
}
Daios8备忘录te date = new Date();
String messge = "Hello(中文), today is " + date.toString();
session.write("Your request: " + str);
System.out.println("Message written..." + str);
}
public void sessionIdle( IoSession sess架构图用什么软件做ion, IdleStatus status ) throws Exception
{
System.out.println( "IDLE " + session.getIdleCount( status ));
}
public void sessionOpened(IoS实例化ession session) throw架构师认证s Exception{
//none
}
}
package com.mr.game.server.app;
import java.io.IOException;架构师
import java.nio.charset.Charset;
import java.net.Inet实例化目标有几种办法SocketAddress;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.core.service.IoAc实例化需求ceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;服务器体系
import实例化目标是什么意思 org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logginios14桌面布局图片g.Logg服务器体系ingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.core.session.IdleStat实例化目标是什么意思us;
/**
* 功用:这是第一个Mina服务端运用示例
* 作者:技能大黍
*
*/
public架构设计 class App
{
private static final int PORT = 9123;
public static void main( String[] args )
{
//界说一个接纳器
IoAcceptor acc服务器操作体系eptor = new NioSocketAcc架构eptor();
//增加日志
acceptor.getFilterChaitcp/ip协议n().addLast("logger",newtcp/ip四层模型 LoggingFilter());
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFil服务器地址在哪里看ter(new TextLineCodecFTCP/IPaios14cto实例化目标的关键字ry(Charset.forName("UTF-8"))));
//处理客户端央求
acceptor.setHandler(new Tim实例化目标e服务器是什么ServerHandler());
//设置通讯的字节ios最好玩的手游流量单位
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
try{
//绑定端口
acceptor.bind(new Inetcp/ip参阅模型tSocketAddress(PORT));
System.out.println("The mina server has been started.");
}catch(IOExce实例化servlet类反常ption e){
e.printStackTrace();
}
}
}
小结
- mina是一个封装Java NIO技能的结构
- mina结束了网络异步通讯的概念
- mitcp/ip协议的意义na把网络的物理通讯与事务逻辑代码解耦合,方便了运用程序员编程
Mina结构原理
Mina架构
Mina的结构如下图所示:
Mina封装了TCP/UDP/串行化以及虚通道通讯等物理网络通讯机制,运用程序员只重视自己的事务逻辑即可。
- Mina架构图制造分为三层结构
- I/O服架构图用什么软件做务层–实施实践的I/O操作
- I/O过滤器链路层–过滤和转化字节为希望的数据结构
- I/O句柄处理层–在这层放实践的事务逻辑代码
- 创立一个最基本的Mina运用,必须做以下几步
- 创立I/O服务层–挑选一个能够运用服务(Acceptor)或许自己创立服务
- 创立过滤器链–挑选一个现存的过滤ios14器,或许自己创立一个过滤器
- 创立一个I/O句柄政策–写事务逻辑,处理不同的音讯
服务端架构
服务端架构
服务端在一个端口监听网络央求,处理来自网络的消架构图制造息,照顾这些tcp/ip协议的意义网络央求。mina运用Session来处理客户端(根据TCP和UDP协议的客户端),IOAcceptor类监听网络联接和数据包。有一个新联接,那么mina会个新的session政策,从session获取的数据包都实例化类是穿过指定的过滤器链。因而,过滤器链可批改数据包。比如,把字节信息转化成高阶政策运用,打包和解码特定的数据包等。毕竟打包/转化政策到IOHandler中,因而IOHandl架构图er用来填充事务逻辑代码。
小结
- mina结构是一个封装各种物理底层通讯机制,让运用程序员注服务器地址在哪里看重事务逻辑
- mina结tcp/ip是因特网的什么构分为三tcp/ip参阅模型层:IO服务层、过滤器链路层和句柄处理层
- IOAcceptor政策封装了网络服务器怎么建立物架构理链接
- 服务政策处理的效果是产生一个Sessions政策
- 继承IoHandler实例化目标的关键字Adapter结束事务逻tcp/ip是什么意思辑ios14
IoService服务层
IoService服务
IoService规划用来笼统服务端网络链接,而Io实例化目标是什么意思Connector接口用来笼统客户端链接。
IoService接口供给了基本的I/O服务,而且处理I/O的Session功用。它是mina结构中最要害的部分。
IoServtcp/ip模型ice供给以下功用
- session处理:创立和删去sessionios体系,以及侦测放置联接
- 过滤器链处理:处理过滤器,答运用户恣意批改链
- 句柄调用:当有接纳到音讯时调用处理实例化数组句柄(根据作业驱动概念)
- 核算处理:实时更新音讯发送的数量、字节发送数量等
- 监听处理:监听服务以便客户端能够联接
- 通讯处理:处理通讯双方的数据传输
中心接口办法
IoService详解
IoService政策结束两个最重要的类:IoAccios14桌面布局图片eptor和IoConnector接口。
服务端构建一个服务需求结束一个Ioios是什么意思Acceptor接口架构的结束类。客户端需求服务器操作体系麒麟软件结束IoConnector的结束类。
IoAcceptor接tcp/ip是一组口界说一个事务逻辑办法accept()用来担任实例化是什么意思创立一个新的联ios模拟器接。服务端接纳ios14.4.1更新了什么网络联接央求。
mina政策各种类型的物理网络联接,供给了如下的四种IoAccepios14.4.2值得更新吗tor结束类。
IoService政策结束两个最重架构要的类:IoAcceptor和IoConnector接实例化servlet类反常口
服务端服务器操作体系构建一个服务需求结束一个IoAc架构师和程序员的差异ceptorios14.4.2值得更新吗接口的结束类。客户端需求结束IoConnector的结束类
IoAcceptor接口服务器租借多少钱一年界说一个事务逻辑办法accept()用来担任创立一个新的联接。服务端接纳tcp/ip是一组网络联接央求
mina政策各种类型的物理网络联接,供给了如下的四种IoAcce架构师需求把握哪些知识ptor结束类
小结
- IoService是mina的中心API
- IoServ服务器租借多少钱一年ice封装了各种物ios14.4.2值得更新吗理网络联接,tcp/ip四层模型供给了四种IoService结束的东西类:NioSocketAcceptor 、NioDatagramAcceptor 、AprSocketAcceptor 、VmP架构师ipeSocketAcceptor
- IoService首要供给session处理、过滤器处理、句柄处理(音讯/作业处理)和通讯处理等功用
Session、过滤器和作业处理
Session的状况
Session是mi架构师工资一月多少na结构的中心。每次一个新客户端联接到服务器,那么会创立一个新的session政策,然后保存在内实例化目标存到客户端联接。
session有三种状况:
- 联接
- 放置
- 封闭
sessiontcp/ip参阅模型用来保存联接的耐久化信息,以及额定的服务器信息。这些信息是服务器处理客户端央求时需求的信息,而且持续实例化需求整个session的生命周期
ses服务器操作体系sion在它的生命周期中有如下状况:
- Connected: 一个session被创立而且能够被运用
- Idle: 一个不处理任何央求
- Idle for read: 持tcp/ip模型续没有从sessiontcp/ip模型读的放置时刻
- Idle for writeTCP/IP: 持续没有向session写的放置时刻
- Idle for both: 即没有读也服务器体系没有写的放置时刻
- Closing: 一个ses实例化目标是什么意思sion正在封闭TCP/IP的状况
- Closed: 一个session现已被封闭了的状况
Session装备
运用一个Session时需求装备,对session有两种装备:
- 标准装备
- 接纳buffer的大小
- 发送buffer的大小
- 放置时服务器租借间
- 写超时时刻
- 自界说装备,除了以上架构是什么意思标准装备或许还有额定信息需求知道。比如,需求知道现已联接了多少个联接的客户端数量。
session是一个结束Map接口的结束类,运用键/值的办法来保存值。当一个session被创立之后,有一个容器也会主动被创立
不要在session保存过大的信息,或许生命周期很长的数据结构内容。也就是,被保存的政策的生命周期不能大于session的生命周期
每个session会相关一个过滤器链,这些链会在网络联接央求和音讯读写进程处理
Session的默许功用
每个session会保存以下记载信息
- 网络发送tcp/ip协议的意义和接纳的字节数量
- 网络发送和接纳的音讯数量
- 放置状况
- 吞吐量
- 其它有用信息
句柄(作业)处理,一个session至少会相关一个句柄(作业)处理。这个句柄(作业)首要担任向运用分发音讯。一同架构师,句柄也担任经过session发送照顾的数据包–运用write()办法即可
session.writeios8备忘录(<音讯内容>);
了解默许的过滤器
重写作业
咱们继承IoAdap实例化servlet类反常ter而不是直接结束I服务器体系oFilter接口时,需求重写相应的作业处理办法。
常用作业
小结
- session是mina结构的中心每个客户端联接会有一个sesstcp/ip是一组ion政策对应
- 与客户端通讯是经过session的read和write方服务器租借法来结束
- session有三种首要情架构图况:联接、放置和封闭状况
- 一个session相关一个过滤器链,过滤器结束作业处理机制tcp/ip是一组
- 过滤器有7个首要作业:
- sessionCreate
- sessionOpened
- sessionClo实例化目标有几种办法sed
- sessionIdle
- exceptionCaught
- messageRecei实例化是什么意思ved
- message实例化一个类Sent
Mina中心API解说
为什么运用iOSIoBuffer
- IoBuffer是Mina运用运用tcp/ip参阅模型字节buffer政策。它用来替换NIO包中的ByteBuffer类。
- 不运用ByteBuffer有两个理由
- 不供给getter和set服务器体系ter办法
- 关于可变长度的数据很处理
- IoBuffer是一个笼统类,因而不能直接实例化,需求结束allocate()办法来实例化
设服务器租借置和运用buffer
设置buffer一般有两种办法
- 默许分配为堆buffer– IoBuffer.setUseDirectB服务器内存和一般内存有什么差异uffer(false);
- 回来一个堆buffer — IoBuffer buf = IoBuffer.allocate(1024);
创立主动可扩展buffer
- IoBuffer buffer = IoBuffer.allocTCP/IPate(8);
- buffios14.4.1更新了什么e架构师认证r.setAutoExpand(tr服务器内存和一般内存有什么差异ue);
- buffer.putString(“12345678”, encoder);
- buffer.put((byte实例化servlet类反常)10); // Add more to this buffios是什么意思er
创立可实例化数组弹性buffer
- IoBuffer架构师和程序员的差异 buffer = IoBuffer.allocate(16);
- buffer.setAutoShrink(true);
- buffer.put((byte)1);
- System.out.println(“Initial Btcp/ip协议的意义uffer capacity = “+buf服务器体系fer.capacity())服务器租借多少钱一年;
- buffer.shrink();
- System.oios下载ut.println(“Initial Buffer capaciios14.4.1更新了什么ty aftertcp/ip参阅模型分为哪几层 shrink = “+buffetcp/ip模型r.capacity());
- buffer.c实例化目标是什么意思apacity(32);服务器操作体系
- System.out.priios最好玩的手游ntln(“Buffer capacity after incrementing capacity to 32 = “+b架构师认证uffer.capacios是什么意思ity());
- buffer.shrink服务器是什么();
- System.out.println(“Buffer capacity after shrink= “+buffer.capaci服务器和电脑主机的差异ty());
把握ProtocolCodecFilter
T服务器CP保证正确的发送数据包,可是不保证发送方的写操作能够在接纳方正确的架构师认证读取。
在Mina术语中,假定没有运用 ProtocolCodecFilter而进行IoSession.write(音讯)操作,会导致接纳产生多个mestcp/ip四层模型sageReceive作业产生,以及屡次IoSession.write(音讯)操作会导致单个messageReceived实例化目标有几种办法作业产生。这种假定服务端和客户端在同一台机器上不会产生tcp/ip协议的意义,可是在不同机器上一定会产生。
大多数和的网络运用都需求当时音讯完毕之后,才华进行下一个音讯的操作。
运用程序员在能够在IoHander类中结束以上全部逻辑,但架构是什么意思是假定运用了ProtocolCodecFilter政策,那么能够咱们编程愈加方便。运用ProtocolCodecFilter政策,能够结束把网络协议逻辑与咱们在IoHandler政策中的事务架构师工资一月多少逻辑解耦合。由于,咱们的客户端是服务器操作体系麒麟软件针对C++的,所tcp/ip四层模型以,传输的音讯都文本字符串作为载架构设计体,因而,咱们在服务端只需求这样运用即可。
小结
- IoBuffer结束了可弹性的buffer功用
- ProtocolCode服务器和电脑主机的差异cFilter简化了音讯编码和解码办法
毕竟
记住给大黍❤️重视+点赞+保藏+议论+转发❤️
作者:老九书院—技能大黍
著作权归作者全部。商业转载请联系作者取得授权,非商业转载请注明出处。