分享
 
 
 

如何规划您的大型JAVA多并发服务器程序

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如何规划您的大型JAVA多并发服务器程序

作者: 陈林茂 2002-04-08

JAVA 自从问世以来,越来越多的大型服务器程序都采用它进行开发,主要是看中

它的稳定性及安全性,但对于一个新手来说,您又如何开发您的JAVA 应用服务器,

同时又如何规划您的JAVA服务器程序,并且很好的控制您的应用服务器开发的进度,

最后,您又如何发布您的JAVA 应用服务器呢?(由于很多前辈已有不错的著作,我

只能在这里画画瓢,不足指出,请多来信指正,晚辈将虚心接受!本人的联系方式:

linmaochen@sohu.com

废话少说,下面转入正题:

本文将分以下几个部分来阐述我的方法:

1、 怎样分析服务器的需求?

2、 怎样规划服务器的架构?

3、 怎样规划服务器的目录及命名规范、开发代号?

4、 原型的开发(-): 怎样设计服务器的代码骨架?

5、 原型的开发(二): 怎样测试您的代码骨架?

6、 详细的编码?

7、 如何发布您的JAVA 服务器产品?

一、 如何分析服务器的需求?

我的观点是:

1。服务器就像一台轧汁机,进去的是一根根的甘蔗,出来的是一杯杯的甘蔗汁;

也就是说,在开发服务器之前,先要明白,服务器的请求是什么?原始数据是什么?

接下来要弄明白,希望得到的结果是什么? 结果数据应该怎样来表述?

其实要考虑的很多,无法一一列出(略)。

二、如何规划服务器的架构?

首先问大家一个小小的问题:在上海的大都市里,公路上的公交客车大致可以分为以下两类:

空调客车,票价一般为两块,上车不需要排队,能否坐上座位,就要看个人的综合能力;

无人售票车,票价一般1 块和一块五毛,上车前需要规规矩矩排队,当然,座位是每个人都有的。

那么,我的问题是,哪类车的秩序好呢?而且上下车的速度快呢?答案是肯定的: 无人售票车。

所以,我一般设计服务器的架构主要为:

首先需要有一个请求队列,负责接收客户端的请求,同时它也应有一个请求处理机制,说到实际

上,应有一个处理的接口;

其次应该有一个输出队列,负责收集已处理好的请求,并准备好对应的回答;当然,它也有一个

回答机制,即如何将结果信息发送给客户端;

大家都知道,服务器程序没有日志是不行的,那么,服务器同时需要有一个日志队列,负责整个服

务器的日志信息收集和处理;

最后说一点,上公交车是需要有钞票的,所以,服务器同样需要有一个验证机制。

...(要说的东西实在太多,只好略)

三、 怎样规划服务器的目录及命名规范、开发代号

对于一般的大型服务器程序,应该有下面几个目录:

bin : 主要存放服务器的可执行二进制文件;

common: 存放JAVA程序执行需要的支持类库;

conf : 存放服务器程序的配置文件信息;

logs : 存放服务器的日志信息;

temp : 存放服务器运行当中产生的一些临时文件信息;

cache : 存放服务器运行当中产生的一些缓冲文件;

src : 当然是存放服务器的JAVA源程序啦。

......(其他的设定,根据具体需求。)

四、原型的开发(-): 怎样设计服务器的代码骨架?

1。首先服务器程序需要有一个启动类,我们不妨以服务器的名字命名:(ServerName).class

2。服务器需要有一个掌控全局的线程,姑且以:(MainThread.class)命名;

3。注意不论是短连接和长连接,每一个客户端需要有一个线程给看着,以 ClientThread.class 命名

4。请求队列同样需要以线程的方式来表现: (InputQuene.Class),对应的线程处理类以InputProcessThread.class

命名;

5。输出队列也需要一个线程:(OutputQuene.Class),对应的处理机制以OutputProcessThread.class 命名;

6。日志队列也是需要一个线程的,我们以 logQuene.class,logQueneThread.Class 来命名;

7。缓冲区的清理同样需要定时工作的,我们以CacheThread.Class 来命名;

8. 如果您的参数信息是以XML的方式来表达的话,那么我也建议用一个单独的类来管理这些参数信息:

Config.Class

9. 当然,如果您想做得更细一点的话,不妨将客户端客服务器端的通讯部分也以接口的形式做出来:

CommInterface.Class

......(太多,只能有空再说!)

五、 原型的开发(二): 怎样测试您的代码骨架?

下面为原型的骨架代码,希望大家多多提点意见!谢啦!

/* 服务器描述 : 服务器主控线程

1。读取组态文件信息

2。建立需求输入队列

3。建立需求处理输出队列

4。建立需求处理线程

5。建立输出预处理线程,进行需求处理结果的预处理

6. 建立缓冲区管理线程,开始对缓冲取进行管理

7。建立服务连接套捷字,接受客户的连接请求,并建立客户连接处理线程

*/

import java.io.*;

import java.net.*;

import java.util.*;

public class mainThread extends Thread {

private ServerSocket serverSocket=null;

/*当前服务器监听的端口*/

private int serverPort;

public mainThread(String ConfUrl) {

try{

/*建立服务器监听套接字*/

this.serverSocket =new ServerSocket(serverPort);

}catch(Exception e){

//

System.out.println(e.getMessage());

}

}

/*线程的执行绪*/

public synchronized void run(){

while(listening){

try{

Socket sersocket =this.serverSocket.accept();

ClientThread _clientThread=

new ClientThread([ParamList]);

_clientThread.start();

}catch(Exception e){

}

}

/*退出系统*/

System.exit(0);

}

/*

1。完成客户的连接请求,并验证用户口令

2。接受用户的请求,并将请求信息压入堆栈;

3。从结果输出队列中搜寻对应的结果信息,并将结果信息发送给客户;

4。处理需求处理过程中出现的异常,并将日志信息发送给日志服务器。

*/

import java.io.*;

import java.net.*;

public class ClientThread extends Thread {

public ClientThread([ParamList]){

}

public void synchronized run(){

}

}

/*

请求队列:

1. 将客户的需求压入队列

2。将客户的需求弹出队列

*/

import java.util.*;

public class InputQuene {

private Vector InputTeam;

public InputQuene() {

/*初始化队列容量*/

InputTeam=new Vector(100);

}

/*需求进队函数*/

public synchronized void enQuene(Request request){

InputTeam.add(request);

}

/*将一个请求出队*/

public synchronized void deQuene(int index){

this.InputTeam.remove(index);

}

}

/*

请求队列处理线程

1。按先进先出的算法从需求队列中依次取出每一个请求,并进行处理

2。更新请求的处理状态

3。清理已经处理过的请求

*/

import java.io.*;

import java.util.*;

public class InputProcessThread extends Thread{

private InputQuene _InQuene;

public InputProcessThread(){

}

public void run(){

}

}

/*

结果输出队列:

1。完成输出结果的进队

2。完成输出结果的出队

*/

import java.util.*;

import java.io.*;

public class OutputQuene {

//结果输出队列容器

private Vector outputTeam;

public OutputQuene() {

//初始化结果输出队列

outputTeam=new Vector(100);

}

//进队函数

public synchronized void enQuene(Result result){

outputTeam.add(result);

}

/*出队函数*/

public synchronized void deQuene(int index){

outputTeam.remove(index);

}

}

/*

结果处理线程:

1。完成输出结果的确认

2。完成输出结果文件流的生成

3。完成文件流的压缩处理

*/

import java.io.*;

public class OutputProcessThread extends Thread{

private OutputQuene _outputQuene;

public OutputProcessThread([ParamList]) {

//todo

}

/*线程的执行绪*/

public void run(){

while(doing){

try{

/*处理输出队列*/

ProcessQuene();

}catch(Exception e){

e.printStackTrace();

}

}

}

}

/*

日志信息处理线程:

功能说明:

1。完成服务器日志信息的保存

2。根据设定的规则进行日志信息的清理

期望的目标:

目前日志信息的保存在一个文件当中,以后要自动控制文件的大小。

*/

import java.io.*;

import java.util.*;

public class LogThread extends Thread{

private LogQuene logquene;

public LogThread([ParamList]){

//todo

}

/*处理日志信息*/

public void run(){

while(doing){

this.processLog();

try{

this.sleep(100);

}catch(Exception e){

}

}

}

}

/* 功能描述:

管理缓冲区中的文件信息,将文件所有的大小控制在系统设定的范围之内

*/

import java.io.*;

import java.lang.*;

import java.util.*;

import java.text.*;

import java.math.*;

public class CacheThread extends Thread{

private String CachePath;

/*类的建构式 : 参数:URL 缓冲区目录的路径信息*/

public CacheThread(String Url) {

this.CachePath =Url;

/*创建文件搜索类*/

try{

this.CacheDir =new File(this.CachePath);

}catch(Exception e){

e.printStackTrace();

}

}

//线程的执行绪

public void run(){

//定时清理缓冲区中的文件

}

......

}

今天就写到这里,以后我会再写!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有