作者:老九—技能大黍

交际:知乎

大众号:老九书院(新人有惊喜)

特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权

前言

假定要运用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结构开发

Mina封装了TCP/UDP/串行化以及虚通道通讯等物理网络通讯机制,运用程序员只重视自己的事务逻辑即可。

游戏服务器Mina结构开发

  • Mina架构图制造分为三层结构
    • I/O服架构图用什么软件做务层–实施实践的I/O操作
    • I/O过滤器链路层–过滤和转化字节为希望的数据结构
    • I/O句柄处理层–在这层放实践的事务逻辑代码
  • 创立一个最基本的Mina运用,必须做以下几步
    • 创立I/O服务层–挑选一个能够运用服务(Acceptor)或许自己创立服务
    • 创立过滤器链–挑选一个现存的过滤ios14器,或许自己创立一个过滤器
    • 创立一个I/O句柄政策–写事务逻辑,处理不同的音讯

服务端架构

游戏服务器Mina结构开发

服务端架构

服务端在一个端口监听网络央求,处理来自网络的消架构图制造息,照顾这些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结构中最要害的部分。

游戏服务器Mina结构开发

IoServtcp/ip模型ice供给以下功用

  • session处理:创立和删去sessionios体系,以及侦测放置联接
  • 过滤器链处理:处理过滤器,答运用户恣意批改链
  • 句柄调用:当有接纳到音讯时调用处理实例化数组句柄(根据作业驱动概念)
  • 核算处理:实时更新音讯发送的数量、字节发送数量等
  • 监听处理:监听服务以便客户端能够联接
  • 通讯处理:处理通讯双方的数据传输

中心接口办法

游戏服务器Mina结构开发

游戏服务器Mina结构开发

游戏服务器Mina结构开发

游戏服务器Mina结构开发

IoService详解

游戏服务器Mina结构开发

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结束类

游戏服务器Mina结构开发

游戏服务器Mina结构开发

小结

  • IoService是mina的中心API
  • IoServ服务器租借多少钱一年ice封装了各种物ios14.4.2值得更新吗理网络联接,tcp/ip四层模型供给了四种IoService结束的东西类:NioSocketAcceptor 、NioDatagramAcceptor 、AprSocketAcceptor 、VmP架构师ipeSocketAcceptor
  • IoService首要供给session处理、过滤器处理、句柄处理(音讯/作业处理)和通讯处理等功用

Session、过滤器和作业处理

Session的状况

Session是mi架构师工资一月多少na结构的中心。每次一个新客户端联接到服务器,那么会创立一个新的session政策,然后保存在内实例化目标存到客户端联接。

游戏服务器Mina结构开发

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被创立之后,有一个容器也会主动被创立

游戏服务器Mina结构开发

不要在session保存过大的信息,或许生命周期很长的数据结构内容。也就是,被保存的政策的生命周期不能大于session的生命周期
每个session会相关一个过滤器链,这些链会在网络联接央求和音讯读写进程处理

Session的默许功用

每个session会保存以下记载信息

  • 网络发送tcp/ip协议的意义和接纳的字节数量
  • 网络发送和接纳的音讯数量
  • 放置状况
  • 吞吐量
  • 其它有用信息

句柄(作业)处理,一个session至少会相关一个句柄(作业)处理。这个句柄(作业)首要担任向运用分发音讯。一同架构师,句柄也担任经过session发送照顾的数据包–运用write()办法即可

session.writeios8备忘录(<音讯内容>);

了解默许的过滤器

游戏服务器Mina结构开发

重写作业

咱们继承IoAdap实例化servlet类反常ter而不是直接结束I服务器体系oFilter接口时,需求重写相应的作业处理办法。

游戏服务器Mina结构开发

游戏服务器Mina结构开发

常用作业

游戏服务器Mina结构开发

小结

  • 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

  1. IoBuffer是Mina运用运用tcp/ip参阅模型字节buffer政策。它用来替换NIO包中的ByteBuffer类。
  2. 不运用ByteBuffer有两个理由
    • 不供给getter和set服务器体系ter办法
    • 关于可变长度的数据很处理
  3. IoBuffer是一个笼统类,因而不能直接实例化,需求结束allocate()办法来实例化

游戏服务器Mina结构开发

服务器租借置和运用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四层模型以,传输的音讯都文本字符串作为载架构设计体,因而,咱们在服务端只需求这样运用即可。

游戏服务器Mina结构开发

小结

  • IoBuffer结束了可弹性的buffer功用
  • ProtocolCode服务器和电脑主机的差异cFilter简化了音讯编码和解码办法

毕竟

记住给大黍❤️重视+点赞+保藏+议论+转发❤️

作者:老九书院—技能大黍

著作权归作者全部。商业转载请联系作者取得授权,非商业转载请注明出处。