package com.dy.testClient;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import com.dy.testClient.tcpClient.TcpClUnit;
|
import com.dy.testClient.tcpClient.TcpClUnitConfigVo;
|
import org.jdom2.Document;
|
|
import com.dy.testClient.rmiClient.RmiClUnit;
|
import com.dy.testClient.rmiClient.RmiClUnitConfigVo;
|
import com.dy.common.mw.UnitInterface;
|
import com.dy.common.mw.support.SupportUnit;
|
import com.dy.common.mw.support.SupportUnitConfigVo;
|
import com.dy.common.util.ConfigXml;
|
public class Server {
|
|
private ConfigXml conf = null ;
|
private Document doc = null ;
|
private boolean showStartInfo = false ;
|
|
private final List<UnitInterface> units = new ArrayList<UnitInterface>() ;
|
|
/**
|
* @param args
|
*/
|
public static void main(String[] args) {
|
Server sv = new Server();
|
Long start = System.currentTimeMillis() ;
|
try {
|
sv.conf = new ConfigXml() ;
|
sv.doc = sv.conf.createDom(sv.getClass(), "/config.xml") ;
|
////////////////
|
//服务 配置
|
sv.showStartInfo = sv.conf.getSetAttrBoolean(sv.doc, "config.server", "showStartInfo", null, null) ;
|
|
sv.startUnits() ;
|
|
String svName = null ;
|
try{
|
svName = sv.conf.getSetAttrTxt(sv.doc, "config.server", "name", null, false, null) ;
|
}catch(Exception e){
|
svName = "" ;
|
}
|
|
System.out.println("") ;
|
System.out.println("OOOOOOOOOO OOOOOOOO OOOOOOOO") ;
|
System.out.println("@@@@@@@@@@@@@@@@#O $@@@@@@@@& @@@@@@@@#") ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@# @@@@@@@@# $@@@@@@@@&") ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@@@# #@@@@@@@@@@@@@@@@O") ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@") ;
|
System.out.println("@@@@@@$ $@@@@@@@@@& O@@@@@@@@@@@#") ;
|
System.out.println("@@@@@@$ @@@@@@@@@ @@@@@@@@@& " + svName + "tcpTestClient " ) ;
|
System.out.println("@@@@@@$ @@@@@@@@@ &@@@@@@@@") ;
|
System.out.println("@@@@@@$ O@@@@@@@@@ &@@@@@@@@") ;
|
System.out.println("@@@@@@$ #@@@@@@@@@$ &@@@@@@@@" ) ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ Runing in standalone mode" ) ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@@@& &@@@@@@@@ Startup in " + (System.currentTimeMillis() - start) + " MS" ) ;
|
System.out.println("@@@@@@@@@@@@@@@@@@@# &@@@@@@@@") ;
|
System.out.println("@@@@@@@@@@@@@@@@#O &@@@@@@@@") ;
|
System.out.println("") ;
|
|
}catch(Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
private void startUnits(){
|
try {
|
////////////////////////////////////////////////////////
|
//支持模块: springHibernate和 线程池
|
SupportUnitConfigVo supVo = new SupportUnitConfigVo() ;
|
//短工作时长线程池,线程负责用时较短的工作任务
|
supVo.short_maxThread = conf.getSetAttrPlusInt(doc, "config.support", "short_maxThread", null, 1, 1000, null) ;//池中最大线程数为所有CPU核数+1
|
supVo.short_minThread = conf.getSetAttrPlusInt(doc, "config.support", "short_minThread", null, 1, 5, null) ;//池中最小线程数
|
supVo.short_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_freeTimeout", null, 1, 90, null) * 1000 ;//线程数空闲时长,若池中线程数量大于minThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等
|
supVo.short_busyTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_busyTimeout", null, 1, 10, null) * 1000 ;//线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒
|
//长工作时长线程池,线程负责用时较长的工作任务
|
supVo.long_maxThread = conf.getSetAttrInt(doc, "config.support", "long_maxThread", null, -1, 1000, null) ;//池中最大线程数,若为-1,不受限制
|
if(supVo.long_maxThread < 0){
|
supVo.long_maxThread = -1 ;
|
}
|
supVo.long_minThread = conf.getSetAttrPlusInt(doc, "config.support", "long_minThread", null, 0, 5, null) ;//池中最小线程数
|
supVo.long_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "long_freeTimeout", null, 1, 90, null) * 1000 ;//线程数空闲时长,若池中线程数量大于minThread,且有的线程空闲时长超过freeTimeout,则清除该线程
|
supVo.long_busyTimeout = conf.getSetAttrInt(doc, "config.support", "long_busyTimeout", null, -1, 10, null) ;//线程不间断工作时长(单位为秒)超时限,若为-1,不受限制
|
if(supVo.long_busyTimeout < 0){
|
supVo.long_busyTimeout = -1 ;
|
}
|
|
supVo.showStartInfo = showStartInfo ;
|
|
AdapterImp_SupportUnit supAdap = new AdapterImp_SupportUnit() ;
|
supAdap.setConfig(supVo);
|
SupportUnit supUnit = SupportUnit.getInstance() ;
|
supUnit.setAdapter(supAdap);
|
supUnit.start(obj -> {
|
});
|
units.add(supUnit) ;
|
|
// ///////////////
|
// rmi 模块
|
RmiClUnitConfigVo rmiClVo = new RmiClUnitConfigVo();
|
rmiClVo.svUrl = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvUrl", null, false, null) ;
|
rmiClVo.svContext = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvContext", null, false, null) ;
|
rmiClVo.svPort = conf.getSetAttrPlusInt(doc, "config.rmiCl", "rmiSvPort", null, 0, 65535, null) ;
|
AdapterImp_RmiClUnit rmiClAdap = new AdapterImp_RmiClUnit();
|
rmiClAdap.setConfig(rmiClVo);
|
RmiClUnit rmiClUnit = RmiClUnit.getInstance();
|
rmiClUnit.setAdapter(rmiClAdap);
|
rmiClUnit.start(obj -> {
|
});
|
units.add(rmiClUnit) ;
|
|
|
// ///////////////
|
// Tcp Client 模块
|
TcpClUnitConfigVo tcpClVo = new TcpClUnitConfigVo();
|
tcpClVo.enable = conf.getSetAttrBoolean(doc, "config.tcpCl", "enable", null, null) ;
|
tcpClVo.heartbeatTimes = conf.getSetAttrPlusInt(doc, "config.tcpCl", "heartbeatTimes", null, 1, 10, null) ;//连续配置次数心跳后发送一次数据
|
tcpClVo.sendInterval = conf.getSetAttrPlusInt(doc, "config.tcpCl", "sendInterval", null, 1, 60, null) ;//发送心跳或数据的时间间隔
|
if(tcpClVo.enable){
|
AdapterImp_TcpClUnit httpClAdap = new AdapterImp_TcpClUnit();
|
httpClAdap.setConfig(tcpClVo);
|
TcpClUnit httpClUnit = TcpClUnit.getInstance();
|
httpClUnit.setAdapter(httpClAdap);
|
httpClUnit.start(obj -> {
|
});
|
units.add(httpClUnit) ;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|