使用Mina框架实现C/S通讯

Apache Mina是一个高性能的网络应用框架,基于Java NIO,提供异步事件驱动的API。Mina简化了C/S通信的实现,支持多种传输协议。通过Filter,特别是Codec Filter,实现了协议逻辑和业务逻辑的分离,使得代码更易维护。Mina项目包括子项目如Asyncweb、FtpServer等,提供HTTP服务器、FTP服务器等功能。
摘要由CSDN通过智能技术生成

什么是Mina?

Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract event-driven asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.

Apache MINA是一个网络应用框架,可以帮助我们开发高性能和高扩展性的网络应用。它通过封装Java NIO提供了一个支持各种传输协议(如:TCP/IP和UDP/IP)的抽象事件驱动异步API。


NIO framework library,
client server framework library, or
a networking socket library

Mina是对Java NIO框架进行了一层封装的Socket库。


Apache MINA comes with many subprojects :
Asyncweb : An HTTP server build on top of MINA asynchronous framework
FtpServer : A FTP server
SSHd : A Java library supporting the SSH protocol
Vysper : An XMPP server

Apache MINA自带了许多子项目:
异步http服务
ftp服务
一个支持ssh协议的java库
XMPP服务

Mina框架主页:
https://mina.apache.org/
Mina框架下载地址:
https://mina.apache.org/downloads-mina.html

为什么使用Mina?

传统socket:阻塞式通信

每建立一个Socket连接时,同时创建一个新线程对该Socket进行单独通信(采用阻塞的方式通信)。这种方式具有很高的响应速度,并且控制起来也很简单,在连接数较少的时候非常有效,但是如果对每一个连接都产生一个线程的无疑是对系统资源的一种浪费,如果连接数较多将会出现资源不足的情况。

nio:非阻塞通信

nio设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。

反应器模式的核心功能如下:
将事件多路分用
将事件分派到各自相应的事件处理程序

NIO 的非阻塞 I/O 机制是围绕 选择器和 通道构建的。Channel 类表示服务器和客户机之间的一种通信机制。Selector 类是 Channel 的多路复用器。 Selector 类将传入客户机请求多路分用并将它们分派到各自的请求处理程序。

通道(Channel 类):表示服务器和客户机之间的一种通信机制。
选择器(Selector类):是 Channel 的多路复用器。

Selector 类将传入的客户机请求多路分用并将它们分派到各自的请求处理程序。

简单的来说:NIO是一个基于事件的IO架构。
最基本的思想就是:有事件我通知你,你再去做你的事情。而且NIO的主线程只有一个,不像传统的模型,需要多个线程以应对客户端请求,也减轻了JVM的工作量。

当Channel注册至Selector以后,经典的调用方法如下:nio中取得事件通知,就是在selector的select事件中完成的。在selector事件时有一个线程向操作系统询问,selector中注册的Channel&&SelectionKey的键值对的各种事件是否有发生,如果有则添加到selector的selectedKeys属性Set中去,并返回本次有多少个感兴趣的事情发生。如果发现这个值>0,表示有事件发生,马上迭代selectedKeys中的SelectionKey,根据Key中的表示的事件,来做相应的处理。实际上,这段说明表明了异步socket的核心,即异步socket不过是将多个socket的调度(或者还有他们的线程调度)全部交给操作系统自己去完成,异步的核心Selector,不过是将这些调度收集、分发而已。

参考文章地址:http://lcllcl987.iteye.com/blog/70703

使用Mina框架实现C/S通讯

Mina快速入门
https://mina.apache.org/mina-project/quick-start-guide.html

Mina API文档
https://mina.apache.org/mina-project/apidocs/index.html

在工程中包含以下两个jar
这里写图片描述

客户端代码

package linchaolong.mina.client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

// Client Socket
public class Client {
   

    private boolean _isExit = false;

    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }

    private void start() {

        BufferedReader in = null;
        try {
            final Socket socket = new Socket("127.0.0.1", 9999);
            final BufferedReader reader = new BufferedReader(
                    new InputStr
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值