1. 线程组,在我们测试方案里面,每个线程模拟一个用户,执行用户的登录、等等等一系列的操作。由于我们的项目是长连接的,如何能实现多个sample公用一个长连接客户端,考虑了很久,最后实现方法如下:
1 package tea.client.network; 2 /** 3 * @author Teaey 4 * @creation 2012-8-25 5 */ 6 public class NetworkClientHolder 7 { 8 /** 9 * 这里使用ThradLocal存储BaseClient 10 * 方便一轮测试的每个sample都是由同一个socketChannel发送 11 * 更真实的模拟用户 12 */ 13 private static ThreadLocal<BaseClient> clientHolder = new ThreadLocal<BaseClient>(); 14 public static BaseClient getClient(String ip, String port) 15 { 16 BaseClient client = clientHolder.get(); 17 if (null == client) 18 { 19 client = new BaseClient(ip, port); 20 client.connect(); 21 clientHolder.set(client); 22 } 23 return client; 24 } 25 } |
代码中使用thread_local保存Socket客户端,这样每个sample中发送数据的客户端都是从这里拿的,就可以保证长连接的情况下,socket不会重复创建,很好的模拟了用户。
当然不单单是链接可以保存,所有需要在线程中共享的数据都可以通过这种方法来实现。