Tsung學習筆記(WebSocket篇)

接下來來測個WebSocket應用。web

  • 被測應用:一個Elixir and Phoenix實現的聊天室。參考代碼
  • URL: 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

相關文章
相關標籤/搜索