fourinone源代码分析.docx
- 文档编号:1140056
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:63
- 大小:38.73KB
fourinone源代码分析.docx
《fourinone源代码分析.docx》由会员分享,可在线阅读,更多相关《fourinone源代码分析.docx(63页珍藏版)》请在冰豆网上搜索。
fourinone源代码分析
本示例把分配任务的程序比喻为“工头”,可以有一个工头进程,也可以有多个工头进程;把处理任务的程序比喻为“工人”,可以在多台机器上启动工人程序,也可以在同一机器上启动工人程序;把协调工人与工头之间的的程序比喻为职介所,有的职介所只负责联系工人和工头,然后工人工头之间直接接触,有的职介所还把工头的任务信息保存,然后工人从职介所里获得要处理的任务。
一、本程序以fourinone-
错误:
Jdk版本不一致
Fourinone.jar是以jdk1.5编译的,如果使用jdk1.7则不能运行,这时可以重新使用jdk1.7进行编译。
编译:
编译时可一次性进行
Javac*.java;
二、配置文件config.xml:
运行时把配置文件config.xml、程序class、fourinone.jar放到同一目录下,如果class文件有包名,需要放在包根目录处,这样默认能找到。
配置文件config.xml:
xmlversion="1.0"encoding="UTF-8"?
>
1888,localhost:
1889
2000,localhost:
2001
2000,localhost:
2001@2010-01-01;localhost:
2002,localhost:
2003@2010-05-01;localhost:
2004,localhost:
2005@2010-05-01
2008,localhost:
2009@2018-05-01;localhost:
2010,localhost:
2011@2018-05-01
1998
2088
--
1988-->
2121
9080
admin,guest:
123456,test:
test
三、简单的分布式通讯:
提示:
①、据测试,因为本例是简单的分布调用,所以不管建立多少个工人(Worker)对象,都只处理第一个建立的工人
②、如果把以下的运行顺序调乱,则产生错误。
1、首先运行职介所(ParkServerDemo)程序。
必须首先运行,用于给工人登记及包工头获取工人信息。
源文件为:
ParkServerDemo.java
import;
publicclassParkServerDemo
{
publicstaticvoidmain(String[]args)
{
BeanContext.startPark();//请看附录1、BeanContext
}
}
2、然后运行工人(SimpleWorker)程序。
工人向职介所登记自己。
源文件为:
SimpleWorker.java
import;
import;
publicclassSimpleWorkerextendsMigrantWorker
{
publicWareHousedoTask(WareHouseinhouse)
{
Stringword=inhouse.getString("word");
"fromContractor.");
returnnewWareHouse("word",word+"world!
");
}
publicstaticvoidmain(String[]args)
{
SimpleWorkermw=newSimpleWorker();
mw.waitWorking("simpleworker");
}
}
3、最后运行包工头(SimpleCtor)程序。
包工头向职介所获取工人信息,并把hello任务分配给工人。
源文件为:
SimpleCtor.java
import;
import;
import;
import;
publicclassSimpleCtorextendsContractor
{
publicWareHousegiveTask(WareHouseinhouse)
{
WorkerLocal[]wks=getWaitingWorkers("simpleworker");
"wks.length:
"+wks.length);
WareHousewh=newWareHouse("word","hello");
WareHouseresult=wks[0].doTask(wh);
while(true){
if(result.getStatus()==WareHouse.READY)
{
"result:
"+result);
break;
}
}
returnnull;
}
publicstaticvoidmain(String[]args)
{
SimpleCtora=newSimpleCtor();
a.giveTask(null);
}
}
四、多工头、多任务、多工人的分布式计算
本例是采用逐个调用每个工人的doTask()并轮循结果状态的方式实现的,与下面“五”的使用doTaskBatch()方式手批量处理任务并等待最慢的工人完成后一次返回的方式不同。
1、首先运行职介所(ParkServerDemo)程序。
必须首先运行,用于给工人登记及包工头获取工人信息。
源文件为:
ParkServerDemo.java
import;
publicclassParkServerDemo
{
publicstaticvoidmain(String[]args)
{
BeanContext.startPark();//请看附录1、BeanContext
}
}
2、然后运行工人(WorkerDemo)程序。
工人向职介所登记自己,登记时要注册自己的名称和端口。
源文件为:
WorkerDemo.java
//运行时必须注意在命令后添加相应的工人名称及工人端口
//如:
WorkerDemoaaa2008(“aaa”表示工人名,“2008”表示端口),
//否则会产生如下错误:
//Exceptioninthread"main"0
//atWorkerDemo.main(WorkerDemo.java:
21)
//该错误为数组下界越标,因main()入口函数中新建WorkerDemo对象时使用arg[0]参数。
//如果运行WorkerDemo命令时没输入任何参数则提未错误
import;
import;
publicclassWorkerDemoextendsMigrantWorker
{
privateStringworkname;
publicWorkerDemo(Stringworkname)
{
this.workname=workname;
}
publicWareHousedoTask(WareHouseinhouse)
{
Stringv=inhouse.getString("id");
"inhouse:
"+v);
returnnewWareHouse("id",v+"-"+workname+"-");
}
publicstaticvoidmain(String[]args)
{
Worke
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fourinone 源代码 分析