接下来来测个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