fourinone源代码分析Word下载.docx
《fourinone源代码分析Word下载.docx》由会员分享,可在线阅读,更多相关《fourinone源代码分析Word下载.docx(63页珍藏版)》请在冰豆网上搜索。
TABLENAME"
<
PROPSROWDESC="
PARK"
<
SERVICE>
ParkService<
/SERVICE>
SERVERS>
localhost:
1888,localhost:
1889<
/SERVERS>
SAFEMEMORYPER>
0.95<
/SAFEMEMORYPER>
HEARTBEAT>
3000<
/HEARTBEAT>
MAXDELAY>
0<
/MAXDELAY>
EXPIRATION>
24<
/EXPIRATION>
CLEARPERIOD>
/CLEARPERIOD>
ALWAYSTRYLEADER>
false<
/ALWAYSTRYLEADER>
STARTWEBAPP>
true<
/STARTWEBAPP>
/PROPSROW>
CACHE"
CacheService<
2000,localhost:
2001<
CACHEGROUP"
STARTTIME>
2010-01-01<
/STARTTIME>
GROUP>
2001@2010-01-01;
2002,localhost:
2003@2010-05-01;
2004,localhost:
2005@2010-05-01<
/GROUP>
2018-05-01<
2008,localhost:
2009@2018-05-01;
2010,localhost:
2011@2018-05-01<
CACHEFACADE"
CacheFacadeService<
1998<
TRYKEYSNUM>
100<
/TRYKEYSNUM>
WORKER"
TIMEOUTDESC="
FALSE"
2<
/TIMEOUT>
2088<
CTOR"
!
--<
CTORSERVERS>
1988<
/CTORSERVERS>
-->
INITSERVICES>
10<
/INITSERVICES>
MAXSERVICES>
/MAXSERVICES>
COMPUTEMODE"
MODEDESC="
DEFAULT"
/MODE>
MODE>
1<
FTTP"
2121<
WEBAPP"
9080<
USERS>
admin:
admin,guest:
123456,test:
test<
/USERS>
LOG"
LEVELNAME>
ALL<
/LEVELNAME>
SEVERE<
WARNING<
INFO<
CONFIG<
LEVELNAMEDESC="
LOGLEVEL"
FINE<
FINER<
FINEST<
OFF<
INFO>
/INFO>
FINE>
/FINE>
/PROPSTABLE>
三、简单的分布式通讯:
提示:
①、据测试,因为本例是简单的分布调用,所以不管建立多少个工人(Worker)对象,都只处理第一个建立的工人
②、如果把以下的运行顺序调乱,则产生错误。
1、首先运行职介所(ParkServerDemo)程序。
必须首先运行,用于给工人登记及包工头获取工人信息。
源文件为:
ParkServerDemo.java
import;
publicclassParkServerDemo
{
publicstaticvoidmain(String[]args)
{
BeanContext.startPark();
//请看附录1、BeanContext
}
}
2、然后运行工人(SimpleWorker)程序。
工人向职介所登记自己。
SimpleWorker.java
publicclassSimpleWorkerextendsMigrantWorker
{
publicWareHousedoTask(WareHouseinhouse)
Stringword=inhouse.getString("
word"
);
"
fromContractor."
returnnewWareHouse("
word+"
world!
"
SimpleWorkermw=newSimpleWorker();
mw.waitWorking("
simpleworker"
3、最后运行包工头(SimpleCtor)程序。
包工头向职介所获取工人信息,并把hello任务分配给工人。
SimpleCtor.java
publicclassSimpleCtorextendsContractor
publicWareHousegiveTask(WareHouseinhouse)
WorkerLocal[]wks=getWaitingWorkers("
wks.length:
+wks.length);
WareHousewh=newWareHouse("
"
hello"
WareHouseresult=wks[0].doTask(wh);
while(true){
if(result.getStatus()==WareHouse.READY)
{
"
result:
+result);
break;
}
}
returnnull;
SimpleCtora=newSimpleCtor();
a.giveTask(null);
四、多工头、多任务、多工人的分布式计算
本例是采用逐个调用每个工人的doTask()并轮循结果状态的方式实现的,与下面“五”的使用doTaskBatch()方式手批量处理任务并等待最慢的工人完成后一次返回的方式不同。
2、然后运行工人(WorkerDemo)程序。
工人向职介所登记自己,登记时要注册自己的名称和端口。
WorkerDemo.java
//运行时必须注意在命令后添加相应的工人名称及工人端口
//如:
WorkerDemoaaa2008(“aaa”表示工人名,“2008”表示端口),
//否则会产生如下错误:
//Exceptioninthread"
main"
0
//atWorkerDemo.main(WorkerDemo.java:
21)
//该错误为数组下界越标,因main()入口函数中新建WorkerDemo对象时使用arg[0]参数。
//如果运行WorkerDemo命令时没输入任何参数则提未错误
publicclassWorkerDemoextendsMigrantWorker
privateStringworkname;
publicWorkerDemo(Stringworkname)
this.workname=workname;
Stringv=inhouse.getString("
id"
inhouse:
+v);
v+"
-"
+workname+"
Worke