下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Java多线程在交易中间件测试中的应用(3)

作者:课课家教育     来源: http://www.kokojia.com点击数:713发布时间: 2016-02-03 13:55:34

标签: java语言java编程java入门

大神带你学编程,欢迎选课

  解决方法及实现细节

  为了解决项目面临的测试难题,本文采用 java 的多线程机制来模拟这三个问题所涉及的 场景。由于在本项目中客户端发出的请求需要复杂的处理,所以本文采用实现 Runnable 接口的方法来实现多线程,这样发 送请求的类还可以继承其它的工具类来实现复杂的处理。

Java多线程在交易中间件测试中的应用(3)_java语言_java编程_课课家

  由于 IMS Connect 所支持的 socket 的数目 (MAXSOC) 可 以从 100 到 65535,而 TCPIPQ 队列的大小可以从 50 到 65535,本文在实现客户端多线程请求前,设置 IMS Connect 的 MAXSOC=100 并且设置 TCPIPQ=50。

  在这个前提下,本文实现的线程类在演示时,如果创建 100 个线程的客户端连 接,就会达到 socket 连接的上限,使 IMS Connect 的 Health 为 0,意味着不能再监听多余的 socket 请求,如果继续 发送 50 个请求,这些请求会进入 TCPIPQ 的队列,使这个缓存队列也达到上限。再继续发送请求就会被拒绝,并得到拒绝 的提示信息。

  如果使用最简单的实现方法,可以参考如下的代码清单 2。

  清单 2. 多客户端并发连接的简单 实现

  class Utility { // 工具类

  public byte[] getHeadData(String...parms){

  .....

  ....

  }

  public byte[] getBodyData(String...parms){

  .....

  ....

  }

  public byte[] getFootData(String...parms){

  .....

  ....

  }

  }

  class SocketClient extends Utility implements Runnable,Test{ // 实现 Runnable 接口

  String hostName;

  int port;

  public SocketClient(String hostName,int port) {

  this.hostName=hostName;

  this.port=port;

  }

  // 线程启动后的连接,并发送数据的

  public void run() {

  try {

  INETAddress inetAddress = InetAddress.getByName(hostName);

  Socket socket = new Socket(inetAddress,port);

  OutputStream os = socket.getOutputStream();

  BufferedOutputStream bos = new BufferedOutputStream(os);

  byte[] sendHeadData = getHeadData("aaa","bbb","ccc");

  byte[] sendBodyData = getBodyData("ddd","eee","fff");

  byte[] sendFootData = getFootData("ggg","hhh","iii");

  bos.write(sendHeadData);

  bos.write(sendBodyData);

  bos.write(sendFootData);

  bos.flush();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  }

  // 测试的主线程,演示测试的一些场景

  public class SocketConnectionDemo {

  public int connectionNumb; // 连接数

  public String hostName;// 连接的 IMS Connect 的域名

  public int port;// 连接的端口

  public SocketConnectionDemo(int connectionNumb,String hostName, int port){

  this.connectionNumb=connectionNumb;

  this.hostName=hostName;

  this.port=port;

  }

  public static void main(String[] args) {

  int connectionNumb = 50;

  String hostName = "ec32181.vmec.svl.com";

  int port = 9999;

  SocketConnectionDemo scd = new SocketConnectionDemo(connectionNumb,hostName,port);

  }

  // 最简单的测试场景

  public void testScenario1(){

  for(int i=1; i<=connectionNumb; i++){

  SocketClient sc = new SocketClient(hostName, port);

  Thread clientT = new Thread(sc,"Client"+i);

  clientT.start();

  }

  // 测试的具体逻辑

  … ..

  … .

  }

  }

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程