1. 線程組,在我們測(cè)試方案里面,每個(gè)線程模擬一個(gè)用戶,執(zhí)行用戶的登錄、等等等一系列的操作。由于我們的項(xiàng)目是長(zhǎng)連接的,如何能實(shí)現(xiàn)多個(gè)sample公用一個(gè)長(zhǎng)連接客戶端,考慮了很久,后實(shí)現(xiàn)方法如下:
1 package tea.client.network;
2 /**
3 * @author Teaey
4 * @creation 2012-8-25
5 */
6 public class NetworkClientHolder
7 {
8 /**
9 * 這里使用ThradLocal存儲(chǔ)BaseClient
10 * 方便一輪測(cè)試的每個(gè)sample都是由同一個(gè)socketChannel發(fā)送
11 * 更真實(shí)的模擬用戶
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客戶端,這樣每個(gè)sample中發(fā)送數(shù)據(jù)的客戶端都是從這里拿的,可以保證長(zhǎng)連接的情況下,socket不會(huì)重復(fù)創(chuàng)建,很好的模擬了用戶。
當(dāng)然不單單是鏈接可以保存,所有需要在線程中共享的數(shù)據(jù)都可以通過這種方法來實(shí)現(xiàn)。