首页 > 范文大全 > 正文

支持高吞吐量彩票交易的消息服务子系统的设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇支持高吞吐量彩票交易的消息服务子系统的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:本文主要说明一个用来支持吞吐量彩票交易消息服务子系统设计实现过程。该子系统提供基于Socket的简单消息服务,屏蔽了Socket通信细节,提供高效的同步及异步请求/响应消息服务。文中对该子系统的流程进行了分析,并对调用其服务的过程进行了详细的描述。

关键词:高吞吐量;彩票交易;同步请求/响应;异步请求/响应

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)15-20ppp-0c

The Design and Development of Message Service Subsystem Supporting High Throughput Lottery Trading

CHEN Wei-wei

(Computer Academy,National University of Defense Technology,Changsha 410073,China)

Abstract:This paper illuminates the design and development procedure of a message service subsystem which supports high throughput lottery trading on Internet. The subsystem offers a message request/response service based on Socket. During the use of the subsystem, you don't have to deal with any Socket communication detail and can get high speed communication service. There are detailed analysis of this subsystem’s working process and detailed usage of this subsystem’s message service in this paper.

Key words:High throughput;Lottery trade;Synchronous request/response;Asynchronous request/response

1 引言

对于两个远程通信的程序来说,可以采用的大多数常见方法在底层都是基于Socket来通信的,由于这些方法都需要做一些额外的处理,所以最快速的通信方式就是直接采取Socket通信。对于一个要求高吞吐量的彩票系统来说,采用Socket通信是一个合适的选择。但是由于Socket通信有一些底层细节需要处理,而且大多数普通开发者都很少接触Socket编程。因此,如果能够在Socket之上做一个简单封装,屏蔽掉Socket编程细节,又将对效率的影响控制在很小的范围内,那么这样的产品对于开发高吞吐量的彩票系统而言,具有很大的好处。我们将上面所述的这样一直服务称为基于Socket的简单消息服务,简称SMS-BOS。

本文首先提出SMS-BOS的建设目标,然后讨论如何设计与实现这样一个服务,并在第4部分提供了一个基于Java NIO的实现原型。通过我们在开发高吞吐量系统的过程来看,SMS-BOS包括以下内容:

1)封装所有Socket通信的底层细节;

2)实现同步的请求/响应消息交互模型;

3)实现异步的请求/响应消息交互模型;

4)分别提供一个服务端的API包和一个客户端的API包供程序调用。

2 系统流程分析

2.1 同步请求/响应模型

当请求方调用SMS-BOS的发送消息的API时,当前线程会一直阻塞到接收到响应方的响应消息为止;在接受到响应消息以后,当前线程会回调请求时传入的某个实现了处理响应消息接口的类的实例,执行完之后返回到发起请求处,接着执行后面的代码。

响应方在收到请求消息之后,会自动调用在配置文件中配置的处理请求消息的指定类的处理响应消息的方法。该类实现了SMS-BOS子系统中提供的处理请求消息的接口。

详细的过程如图1所示。

2.2 异步请求/响应模型

当请求方调用SMS-BOS的发送消息的API时,当前线程在发送完消息之后就直接返回执行后面的代码;在接收到响应消息之后,系统会自动新开启一个线程,回调请求时传入的某个实现了处理响应消息接口的类的实例。

响应方在收到请求消息之后,会自动调用在配置文件中配置的处理请求消息的指定类的处理响应消息的方法。该类实现了与同步模型中同样的接口。

具体流程如图2所示。

3 消息请求/响应过程

SMS-BOS数据传输服务的使用者无需区分服务端与客户端,在通信两端所使用的消息处理接口是完全一致的。在下文中,使用请求方与响应方来表示一个消息请求/响应过程的参与双方。下面详细描述消息请求/响应过程的每一步。

1)发送请求消息

// 获得通道

SmsChannel channel = SmsProvider.getSmsChannel(channelID);

if (channel != null) {

try {

channel.sendMessage(msg,回调对象);

} catch (SmsTimeoutException e) {

e.printStackTrace();

}

}

发送方首先通过通道的ID获得需要的通道channel,然后调用channel.sendMessage()方法来发送消息。需要传入一个实现了ISmsResponseDealor接口的类的对象来接受回调。

发送消息代码如下:

byte[] msgByte = msg.getBytes();

ByteBuffer buffer=ByteBuffer.allocate(msgByte.length);

buffer.clear();

buffer.put(msgByte);

buffer.flip();

channel.write(buffer);

2)接受请求消息

SMS-BOS为每个通道开启一个线程,然后用Java NIO的方式读取数据,通道线程内读数据的过程如下:创建缓冲区、打开Selector,然后注册NIO的Channel的读事件到Selector中去;然后就是等待读数据了,当读到一个消息数据后,新启动一个线程,由该线程负责处理该消息。

3)处理请求

ISmsRequestDealor是处理请求消息的接口,我们首先定义一个实现该接口的类SmsRequestDealor,然后在配置文件中指定response-class属性值为该类,这样当收到请求消息时,首先创建一个指定类的实例:

ISmsRequestDealor dealor = (ISmsRequestDealor) Class.forName(

channel.getRequestDealor()).newInstance();

return dealor.dealRequestMsg(msg);

然后调用该类的dealRequestMsg()方法来处理消息。

4)返回响应消息

SMS-BOS会将第3步中的dealRequestMsg()方法的返回值发送给请求方。

发送消息的代码与第1步中一样。

5)接受响应消息

接受响应消息的代码与第3步中接受请求消息的一样。

6)处理响应消息

第1步中的dealResponseMsg()就是用来处理响应消息的。

4 结束语

通过以上的分析、设计及部分代码实现,我们可以比较清晰的看出SMS-BOS服务的结构及调用方法,通过我们的测试工作得知该系统较好的实现了预期目标:提供了一个屏蔽了通信细节的支持同步、异步两种请求/响应模型的高效通信服务,为构建高吞吐量系统提供了必要的支持。

参考文献:

[1]杜成龙,龙绍军.分布式系统开发优化策略[J].电脑知识与技术:学术交流,2007(18).

[2]George Coulouris,Jeam Dollimore,Tim Kindberg.分布式系统概念与设计[M].金蓓弘,译.机械工业出版社,2006:1-2.

[3]Herber Schildt.Java2:The Complete Reference[M].4th Edition.2002.

[4]李卓恒,翟华.LINUX网络编程[M].北京:机械工业出版社,2000.

[5]刘彦明.JAVA语言及其程序实现[M].西安电子科技大学出版社,1997.

收稿日期:2008-03-09

作者简介:陈卫卫(1978-),男,江苏如东人,软件架构师,软件工程硕士,研究方向:大型网络应用系统架构,J2EE技术。