一个自己倒腾的简单的通信框架(目前只是基于请求响应模式),集成底层的API,目的在于提高通信层的开发效率。该通信框架包括如下几个功能:
1.服务端采用NIO模式,提高通信速率
2.内部提供可选连接池方式,尽可能的将连接重用,提高开发效率。
3.提供过滤器自定义
4.业务处理层自定义
5.提供负载均衡
6.连接选择器与消息选择器分离
7.客户端采用连接池模式,具有自动识别服务端是否存活的功能。
因为环境受限,自己在自己的机子上测试了一下,16分钟,8个客户端,一共640万次简单请求,错误率基本为0
机子的配置是:CPU:2.93G双核,内存:2G内存,操作系统:ununtu10.10
写的还不是很好,如果大家对java写通信方面的东西比较感兴趣的可以私信交流^_^
下个写一个小Demo,首先我们定义个服务端的业务对象ServerHandler实现框架的FPHandler接口,,主要是从客户端接收消息以后,将当前时间和客户端发送过来的消息一并发给客户端,代码如下:
package com.foolfish.Zfocomint.test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.foolfish.comint.handler.FPHandler;
import com.foolfish.comint.session.FPSession;
/**
* 服务端业务处理对象,实现自自FPHandler接口
* messRecv,接收消息时候触发的方法
* messSend,发送消息时候出发的方法
* sessionClosed,链接关闭触发的方法
* sessionCreated,链接创建出发的方法
* @author foolfish
*
*/
public class ServerHandler implements FPHandler{
@Override
public void messRecv(FPSession session, byte[] mess) {
try {
// 处理接收客户端的消息
String m = new String(mess,"utf-8");
/*************************************
* 此处可以做具体的业务处理,demo当中就省略了,
* 只是简单的将客户端的信息返回
*************************************/
// 向客户端回写信息
String date = new SimpleDateFormat("yyyyMMdd HH:mm:ss").format(new Date());
session.write(("服务端返回消息"+ date +m).getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void messSend(FPSession session, byte[] mess) {
// TODO Auto-generated method stub
}
@Override
public void sessionClosed(FPSession session) {
// TODO Auto-generated method stub
}
@Override
public void sessionCreated(FPSession session) {
// TODO Auto-generated method stub
}
}
定义服务端的启动方法,ServerStart
public class ServerStart {
public static void main(String[] args) throws Exception{
// 启动服务端,采用NIO模式
FPAcceptor acceptor = new FPNIOAcceptor();
// 绑定业务处理类
acceptor.setHandlerClass(ServerHandler.class);
// 设置连接池大小
acceptor.setPoolSize(10);
// 设置是否采用连接池(默认使用单链接方式)
acceptor.setIsPool(true);
// 设置负载均衡器(该功能未做性能测试,功能已经完成)
//acceptor.setLbServer(new InetSocketAddress("127.0.0.1", 4320));
// 设置服务端口
acceptor.setPort(4331);
// 启动服务
acceptor.startServer();
}
}
下面定义个客户端:客户端使用一个while循环,不断向服务端发送消息(模拟不断的请求)
/**
* @param args
* @throws IOException
* @throws FPComException
*/
public static void main(String[] args){
String line = "Hello";
int i = 0;
int j = 0;
while(true){
try {
// 设置服务端的地址和端口号
FPIOConnector conn = new FPIOConnector(true, new FPInetAddress("127.0.0.1", 4331));
// 设定自动重发次数(对于延迟等错误情况可以选择自动重发)
conn.setRetryCount(2);
// 发送并接收返回的结果信息,并统计错误率
System.out.println(new String(conn.request(line.getBytes("utf-8")),"utf-8")+"共请求"+(i++)+"次,错误"+(j)+"次");
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FPComException e) {
j++;
continue;
}
}
}
运行服务端启动方法,ServerStart.java,然后运行客户端Client.java,就可以看到运行结果如下
服务端返回消息20110226 20:53:33Hello共请求5445次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5446次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5447次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5448次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5449次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5450次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5451次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5452次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5453次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5454次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5455次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5456次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5457次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5458次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5459次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5460次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5461次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5462次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5463次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5464次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5465次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5466次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5467次,错误0次
服务端返回消息20110226 20:53:33Hello共请求5468次,错误0次
分享到:
相关推荐
很好的一个关于C# socket通信的一个框架,这个是我朋友写的,我想肯定能够给你带来惊喜!
.net 稳定 高效 易用 可同步 TCP 通信框架 使用平台: WinXP,WIN7,WIN8,WINCE,WINPHONE。 使用.net 2.0 框架。 主要功能介绍: 1、可以代替 Oracle,Mysql客户端 在不安装Oracle,MySql客户端的情况下访问, ...
一个很好用的JAVA基于TCP和UDP的Socket通信框架,包括客户端和服务器,以及相应的回调方法
TCP通讯框架资源包,mina 通讯框架,TCP通讯框架,满足常用的TCP网络开发需求。亲测无任何问题。
TCP通信框架 1 概述 2 整体结构示意图 2.1 客户端 2.2 接入层 2.3 业务层 2.4 运营监控层 2.5 资源层 3 通信方式 3.1 客户端到接入层 3.2 接入层内部 3.3 接入层到资源层 3.4 接入层到业务层 ......
基于CocoaAsyncSocket的tcp通信框架 文件内容和下面博文一致,可以先看文章,确认有用后再下载。 当然最好是自己实践一遍了。 http://blog.csdn.net/zhu410289616/article/details/46731605 ...
自己写的TCP异步通讯框架,对原来的进行封装,使得收发消息方便。
Go语言的TCP网络通信框架
易语言后端服务框架,需要用到TCP协议,MYSQL数据库的可以使用这个框架。完美实现多线程并发交互,抗超高并发。使用简单,只需在收到数据后指定位置写代码即可。框架自动进行负载均衡调用处理线程池与MYSQL连接池。
只需把客户端的IP改下运行就可以实现通信,简单的框架,仅供学习
stpro 一个基于tcp协议实现的简洁通信框架
给单位做考勤系统,找了一些通信框架,都不理想,索性就自己动手,类库最开始是去年年初就写好了用,很稳定,后来又断断续续更新(经过实践,抛弃了本来有的UDP通信模块),目前运行比较可靠。因为最开始只是自用,...
本资源是UE4客户端与服务器端之间的通信的一个Demo,主要使用的是TCP通信机制
Socket tcp服务器端通信框架,服务器端部分,这是从一个商业级的物联网项目分离出来的核心代码,让你绕过最难写的Socket管理,内置两个Socket,有两个数据缓冲队列,,仅一个DLL文件,调用时一个激活语句即可,之后...
C#的 TCP/IP通信框架EMTASS2.1:有了它无需了解SOCKET原理也能实现TCP通信编程
7.1 网络应用程序的基本工作流程 7.2 基于TCP的客户/服务器通信程序实例 7.3 基于UDP的客户与服务器通信程序实例 习题
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、 客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通 信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...
netty 高性能通信框架接收tcp链接 并实时数据保存到数据库
从实际项目中分离出来的一个实例。C#编写,TCP通信。客户端发送一个封包给服务器端,服务器端解读,并发送响应给客户端。两边都进行显示。
HP-Socket TCP & UDP 通信框架开发指南 V5.0-20170801 HP-Socket TCP & UDP 通信框架开发指南 V5.0-20170801