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不會重復創建,很好的模擬了用戶。
當然不單單是鏈接可以保存,所有需要在線程中共享的數據都可以通過這種方法來實現。