Java后台服务程序设计文档格式.docx
- 文档编号:14973454
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:16
- 大小:20.41KB
Java后台服务程序设计文档格式.docx
《Java后台服务程序设计文档格式.docx》由会员分享,可在线阅读,更多相关《Java后台服务程序设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
清单1显示了如何编制一个通用服务器框架类文件。
【清单1:
通用服务器框架类文件Server.java】
importjava.util.*;
importjava.io.*;
import.*;
publicclassServer{
protectedMapservices;
Setconnections;
intmaxConnections;
intfreeConn;
ThreadGroupthreadGroup;
privateintcurrentConn;
privatePrintWriterlog=newPrintWriter(System.out,true);
publicbooleanconnected=false;
publicPropertiesproPort,proNum;
publicsynchronizedvoidsetControlFlag(){
connected=true;
}
publicsynchronizedvoidremoveControlFlag(){
connected=false;
}
publicvoidsetProperty(PropertiesproPort,PropertiesproNum){
this.proPort=proPort;
this.proNum=proNum;
publicServer(intmaxConn){
this.maxConnections=maxConn;
this.freeConn=maxConnections;
this.threadGroup=newThreadGroup(;
currentConn=0;
this.services=newHashMap();
this.connections=newHashSet(maxConnections);
publicsynchronizedvoidaddService(Serviceservice,intport,intmaxConn)throwsIOException{
Stringservicename=service.getClass().getName();
Integerkey=newInteger(port);
if(services.get(key)!
=null)thrownewIllegalArgumentException("
端口:
"
+port+"
已经被占用!
);
if(getfreeConnections(maxConn)>
=0){
Listenerlistener=newListener(this,port,service,maxConn);
services.put(key,listener);
log.println("
启动"
+servicename+"
服务在"
+port+"
端口上"
listener.start();
}else{
"
系统并发连接限制已经达到最大值!
服务"
启动失败!
publicsynchronizedvoidaddService(Serviceservice,intport)throwsIOException{
this.addService(service,port,10);
publicsynchronizedbooleanremoveService(intport){
intmaxConn=10;
finalListenerlistener=(Listener)services.get(key);
if(listener==null){
Service"
+"
isn'
tstartedonport"
+port);
returnfalse;
services.remove(key);
listener.pleaseStop();
freeConn+=listener.maxConn;
Close"
+listener.service+"
onport"
returntrue;
publicsynchronizedvoiddisplayStatus(PrintWriterout){
Iteratorkeys=services.keySet().iterator();
while(keys.hasNext()){
Integerport=(Integer)keys.next();
Listenerlistener=(Listener)services.get(port);
out.println("
运行"
\n"
连接限制为"
+maxConnections);
Iteratorconns=connections.iterator();
while(conns.hasNext()){
Sockets=(Socket)conns.next();
intsport=s.getLocalPort();
Listenerlisten=(Listener)services.get(newInteger(sport));
Stringservicename=listen.service;
out.println(servicename+"
响应请求在"
+s.getInetAddress().getHostAddress()+"
的"
+sport+"
当前连接数为"
+currentConn);
当前系统空闲连接数为"
+freeConn);
privatesynchronizedintgetfreeConnections(intmaxConn){
intnum=-1;
if(freeConn>
=maxConn){
freeConn-=maxConn;
num=freeConn;
returnnum;
publicsynchronizedintgetConnections(){
returncurrentConn;
publicsynchronizedintaddConnections(Sockets){
connections.add(s);
returncurrentConn++;
publicsynchronizedintremoveConnections(Sockets){
connections.remove(s);
try{
s.close();
}catch(Exceptione){
;
returncurrentConn--;
publicsynchronizedintgetConnections(intconnections){
intnum=0;
if((num=freeConn-connections)>
=0){
freeConn=num;
}elsenum=-1;
privatesynchronizedintgetFreeConn(){
returnfreeConn;
}
如上所述可知,服务器框架类Server主要是通过端口到监听器影射的散列表services来管理服务对象,Server类的几个主要方法说明如下:
∙addService方法:
此方法能够在特定的端口上创建新的服务,即在指定端口上运行指定的Service对象。
∙removeService方法:
此方法使服务器停止指定端口上的服务,并不终止连接,仅使服务器停止接受新的连接。
∙displayStatus方法:
此方法用于打印指定流上服务器的状态信息。
服务与监听
每个服务都对应着一个监听对象,监听指定端口的连接并在获得连接请求时调用addConnection(Sockets,Serviceservice)方法来取得(释放)一个连接。
清单2显示了如何编制一个监听类文件。
【清单2:
Listener.java的一个简单实现】
publicclassListenerextendsThread{
privateServerSocketlistener;
privateintport;
Stringservice;
privateServicerunService;
privatebooleanstop_flag=false;
intmaxConn;
privatePrintWriterlog=newPrintWriter(System.err,true);
privateThreadGroupgroup;
privateintcurrentConnection
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 后台 服务 程序设计