接下來來測個WebSocket應用。web
ws://localhost:4000/socket/websocket
WebSocket測試的配置和HTTP差很少,若是你尚未看過HTTP,請移鑾駕。惟一不一樣點在於sessions
的配置。這裏給出sessions
之外的完整配置:websocket
<?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd"> <tsung> <clients> <client host="localhost" cpu="4" maxusers="30000"/> </clients> <servers> <server host="localhost" port="4000" type="tcp"/> </servers> <load> <arrivalphase phase="1" duration="1" unit="minute"> <users arrivalrate="10000" unit="second"/> </arrivalphase> </load> <sessions> <!-- 在這裏添加會話 --> </sessions> </tsung>
對於WebSocket來講,一個會話至關於建立鏈接->(發送消息&接收消息)* n ->斷開鏈接
的全過程。這個過程用XML配置來描述就是下面這樣:session
<sessions> <session name="websocket" probability="100" type="ts_websocket" weight="1"> <!-- 建立鏈接 --> <request> <websocket type="connect" path="/socket/websocket"/> </request> <!-- 定義動態變量 room_id --> <setdynvars sourcetype="random_number" start="1" end="100"> <var name="room_id" /> </setdynvars> <!-- 發送消息加入房間的 --> <request subst="true"> <websocket type="message"> {"topic":"room:%%_room_id%%","event":"phx_join","payload":{},"ref":"1"} </websocket> </request> <!-- 發送聊天消息 --> <for var="i" from="1" to="1000" incr="1"> <thinktime min="10" max="60" random="true"/> <request subst="true"> <websocket type="message"> {"topic":"room:%%_room_id%%","event":"publish_message","payload":{"username":"user","body":"test"},"ref":"%%ts_user_server:get_unique_id%%"} </websocket> </request> </for> <thinktime min="1" max="10" random="true"/> <request> <websocket type="close"/> </request> </session> </sessions>
上述配置首先建立了websocket鏈接(type="connect"
),而後在100個房間裏隨機挑了一個房間進,在這個房間裏時而發消息(type="message"
),時而讀別人發來的消息(用thinktime
模擬),發了1000條消息後,主動斷開鏈接(type="close"
)。dom
這裏比較有意思的事定義動態變量(<setdynvars/>
)和使用動態變量。定義不用多說,一看就知道怎麼用了。使用的話,<request/>
元素上必須加上屬性subst="true"
。subst
是substitute(替換)的縮寫,意味着當前的<request/>
元素裏有動態替換的部分,這種部分的長相是%%_變量名%%
,注意變量名前面有個下劃線。socket
和HTTP版同樣,我這裏就偷懶了。tcp