一个自己倒腾的简单的通信框架(目前只是基于请求响应模式),集成底层的API,目的在于提高通信层的开发效率。该通信框架包括如下几个功能:
1.服务端采用NIO模式,提高通信速率
2.内部提供可选连接池方式,尽可能的将连接重用,提高开发效率。
3.提供过滤器自定义
4.业务处理层自定义
5.提供负载均衡
6.连接选择器与消息选择器分离
7.客户端采用连接池模式,具有自动识别服务端是否存活的功能。
下面给出一个小的Demo,采用MINA官方的时间服务器示例来做,其主要功能是客户端向服务端发送一个简单的请求,服务端打印客户端的请求,并返回给客户端当前的请求时间。
先写服务端,业务对象的定义需要实现通信框架的FPHandler接口。FPHandler接口当中定义了如下几个方法
messRecv(FPSession session, byte[] mess) 当信道当中接收消息时触发该方法
messSend(FPSession session, byte[] mess) 当信道当中有消息发送时触发该方法
sessionClosed(FPSession session) 当信道关闭时触发
sessionCreated(FPSession session) 当新连接产生时出发该方法
自定义服务端TestHandler:
public class TestHandler implements FPHandler{
@Override
public void messRecv(FPSession session, byte[] mess) {
try {
if(mess != null){
String Message = new String(mess,"UTF-8");
// 打印客户端信息
System.out.println("Client:" + Message);
// 构造发送给客户端的时间信息
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 向客户端发送信息
session.write(("Server4328:"+sdf.format(new Date())).getBytes("UTF-8"));
}else{
session.write("b".getBytes("UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
@Override
public void messSend(FPSession session, byte[] mess) {
}
@Override
public void sessionClosed(FPSession session) {
}
@Override
public void sessionCreated(FPSession session) {
session.setPool(true);
}
}
编写启动服务端的类,用于启动服务端
public static void main(String[] args) {
try {
// 使用NIO的方式开始连接
FPAcceptor accept = new FPNIOAcceptor();
// 设置业务处理对象
accept.setHandlerClass(TestHandler.class);
// 设置过滤器(可增加多条过滤器)
// accept.getFilterList().add(TestFilter.class);
// 设置负载均衡服务器地址
// accept.setLbServer(new InetSocketAddress("192.168.7.26", 4323));
// 设置服务器端监听端口
accept.setPort(4327);
// 开启服务,这里是阻塞方式。
accept.startServer();
} catch (Exception e) {
e.printStackTrace();
}
}
好了,这里服务端编写完毕,下面写客户端,客户端负责向服务端发送信息,并接收服务端返回的消息,客户端调用方式很简单;示例代码如下
FPIOConnector con = new FPIOConnector(true,new FPInetAddress("192.168.7.26",4327));
// true:表示使用连接池模式,第二个参数用于定义服务端地址与端口
byte[] rebytes = con.request(line.trim().getBytes("UTF-8"));
System.out.println(new String(rebytes,"UTF-8")+"耗时:"+(end-start)+"毫秒");
下面来写一个完整的客户端实现TestC.java,用户从键盘获取输入,并向服务端发送请求,并接收服务端的请求。
public class Test_C {
/**
* @date created on Aug 6, 2010
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while((line = br.readLine()) != null){
long start = System.currentTimeMillis();
// true:设置连接池模式
// FPInetAddress 服务器地址,端口号
FPIOConnector con = new FPIOConnector(true,new FPInetAddress("192.168.7.26",4327));
try {
// 向服务端请求
byte[] rebytes = con.request(line.trim().getBytes("UTF-8"));
long end = System.currentTimeMillis();
System.out.println(new String(rebytes,"UTF-8")+"耗时:"+(end-start)+"毫秒");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FPComException e) {
e.printStackTrace();
}
}
}
}
下面来看下运行结果吧:首先启动服务器,接着启动客户端,在客户端任意输入字符串,将返回服务端的当前时间:如下所示
>hello fpclient
Server4328:2010-10-09 14:24:32耗时:3毫秒
>hahahahha
Server4328:2010-10-09 14:24:44耗时:3毫秒
>你好
Server4328:2010-10-09 14:24:48耗时:1毫秒
Client:hello fpclient
Client:hahahahha
Client:你好
分享到:
相关推荐
Angular_FP项目是一个初学者在Angular框架下创建的第一个项目,展示了如何使用Angular开发Web应用程序的基本步骤。Angular是一款由Google维护的开源JavaScript框架,用于构建单页应用程序(SPA)。它的核心特性包括...
常见的配置有CLDC(Connected Limited Device Configuration)和CDC(Connected Device Configuration),对应的框架有MIDP(Mobile Information Device Profile)和FP(Feature Profile)。 2. **开发环境搭建** ...
Java 是一种广泛使用的计算机编程语言,具有简单性、面向对象、健壮性、安全性、平台独立性等特点。Java 的核心技术包括 Java Standard Edition (Java SE),Java Enterprise Edition (Java EE),以及 Java Micro ...
- **Scrapy Engine(引擎)**:负责协调Spider、Item Pipeline、Downloader和Scheduler之间的通信。 - **Scheduler(调度器)**:接收引擎发来的请求,并按顺序排队等待处理。 - **Downloader(下载器)**:负责...
官方文档涵盖了从入门教程到高级特性的全面内容,是学习和使用CXF的重要参考。 综上所述,Apache CXF 3.1.6是一个强大的Web服务框架,它提供了全面的功能,让开发者能够高效地构建和维护Web服务。通过cxf-wsdl.bat...
- 使用测试框架(如 Mocha)编写测试。 - 确保代码质量和稳定性。 **为测试结构代码库:** - 设计可测试的应用架构。 - 将业务逻辑与外部依赖解耦。 **使用 Mocha 编写行为驱动测试 (BDD):** - Mocha 是一个灵活...
常见的配置有CLDC(Connected Limited Device Configuration)和CDC(Connected Device Configuration),对应的框架有MIDP(Mobile Information Device Profile)和FP(Foundation Profile)等。 **MIDP与CLDC** ...
它融合了面向对象编程(OOP)、函数式编程(FP)以及元编程等多种特性,具有极高的灵活性与可读性。Ruby的设计哲学之一是“程序员幸福第一”,旨在让开发者编写出既高效又易于理解的代码。 #### Ruby基础语法教程 -...
本教程针对初学者,将深入讲解J2ME的基础知识,帮助你快速入门。 一、J2ME概述 J2ME由Java ME配置(Configurations)和Java ME框架(Profiles)组成。配置定义了设备的最低硬件需求,如CLDC(Connected Limited ...
NestJS 是一个基于 Node.js 的框架,它将传统的面向对象编程(OOP)原则与现代的函数式编程(FP)特性相结合,为构建高效、可扩展的服务器端应用提供了强大的工具。NestJS 采用 TypeScript 作为主要编程语言,这使得...