<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WebSocket on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/</link><description>Recent content in WebSocket on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/index.xml" rel="self" type="application/rss+xml"/><item><title>WebSocket.addEventListener(event, handler)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/</guid><content><![CDATA[&lt;h1 id=&#34;websocketaddeventlistenerevent-handler&#34;&gt;WebSocket.addEventListener(event, handler)&lt;/h1&gt;
&lt;p&gt;Set up handler functions for various events on the WebSocket connection. You can define multiple handlers for the same event.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;event&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The event name to define a handler for.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;handler&lt;/td&gt;
              &lt;td&gt;function&lt;/td&gt;
              &lt;td&gt;The function to call when the event happens.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Event name&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;open&lt;/td&gt;
              &lt;td&gt;Emitted when the connection is established.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;message&lt;/td&gt;
              &lt;td&gt;Emitted when a message is received from the server.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ping&lt;/td&gt;
              &lt;td&gt;Emitted when a ping is received from the server. The client will automatically send back a &lt;code&gt;pong&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;pong&lt;/td&gt;
              &lt;td&gt;Emitted when a pong is received from the server.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;close&lt;/td&gt;
              &lt;td&gt;Emitted when the connection is closed by the client 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-close/&#34;&gt;WebSocket.close()&lt;/a&gt; or when the server sends the &lt;code&gt;close&lt;/code&gt; event with code status 1000 (normal closure).&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;error&lt;/td&gt;
              &lt;td&gt;Emitted when an error occurs.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that demonstrates how to add multiple event listeners for the WebSocket &lt;code&gt;message&lt;/code&gt; connection event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);
  ws.binaryType = &amp;#39;arraybuffer&amp;#39;;

  ws.onopen = () =&amp;gt; {
    console.log(&amp;#39;connected&amp;#39;);
    ws.send(Date.now().toString());
  };

  ws.onmessage = () =&amp;gt; {
    console.log(&amp;#39;onmessage event handler!&amp;#39;);
  };

  // Multiple event handlers on the same event
  ws.addEventListener(&amp;#39;message&amp;#39;, () =&amp;gt; {
    console.log(&amp;#39;addEventListener event handler!&amp;#39;);

    ws.close();
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketaddeventlistenerevent-handler">WebSocket.addEventListener(event, handler)&lt;/h1>
&lt;p>Set up handler functions for various events on the WebSocket connection. You can define multiple handlers for the same event.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>event&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The event name to define a handler for.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>handler&lt;/td>
&lt;td>function&lt;/td>
&lt;td>The function to call when the event happens.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Event name&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>open&lt;/td>
&lt;td>Emitted when the connection is established.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>message&lt;/td>
&lt;td>Emitted when a message is received from the server.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ping&lt;/td>
&lt;td>Emitted when a ping is received from the server. The client will automatically send back a &lt;code>pong&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>pong&lt;/td>
&lt;td>Emitted when a pong is received from the server.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>close&lt;/td>
&lt;td>Emitted when the connection is closed by the client
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-close/">WebSocket.close()&lt;/a> or when the server sends the &lt;code>close&lt;/code> event with code status 1000 (normal closure).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>error&lt;/td>
&lt;td>Emitted when an error occurs.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that demonstrates how to add multiple event listeners for the WebSocket &lt;code>message&lt;/code> connection event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.send(data)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-send/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-send/</guid><content><![CDATA[&lt;h1 id=&#34;websocketsenddata&#34;&gt;WebSocket.send(data)&lt;/h1&gt;
&lt;p&gt;Send data through the connection.
You can use &lt;code&gt;JSON.stringify&lt;/code&gt; to convert a JSON or JavaScript values to a JSON string.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;data&lt;/td&gt;
              &lt;td&gt;string / ArrayBuffer / Blob / ArrayBufferView&lt;/td&gt;
              &lt;td&gt;The data to send.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that demonstrates how to add an event listener for the &lt;code&gt;open&lt;/code&gt; WebSocket connection event sends a message and closes the connection.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onopen = () =&amp;gt; {
    ws.send(&amp;#39;lorem ipsum&amp;#39;);
    ws.close();
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketsenddata">WebSocket.send(data)&lt;/h1>
&lt;p>Send data through the connection.
You can use &lt;code>JSON.stringify&lt;/code> to convert a JSON or JavaScript values to a JSON string.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>data&lt;/td>
&lt;td>string / ArrayBuffer / Blob / ArrayBufferView&lt;/td>
&lt;td>The data to send.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that demonstrates how to add an event listener for the &lt;code>open&lt;/code> WebSocket connection event sends a message and closes the connection.&lt;/em>&lt;/p></description></item><item><title>WebSocket.close([code])</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-close/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-close/</guid><content><![CDATA[&lt;h1 id=&#34;websocketclosecode&#34;&gt;WebSocket.close([code])&lt;/h1&gt;
&lt;p&gt;Close the WebSocket connection.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;code (optional)&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;WebSocket status code. (default: 1000) . See &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the list of supported&lt;/a&gt; close codes.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and closes it using the &lt;code&gt;onopen&lt;/code&gt; handler.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onopen = () =&amp;gt; {
    ws.close();
    console.log(&amp;#39;connection closed&amp;#39;);
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketclosecode">WebSocket.close([code])&lt;/h1>
&lt;p>Close the WebSocket connection.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>code (optional)&lt;/td>
&lt;td>number&lt;/td>
&lt;td>WebSocket status code. (default: 1000) . See &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code" target="_blank" rel="noopener noreferrer">the list of supported&lt;/a> close codes.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and closes it using the &lt;code>onopen&lt;/code> handler.&lt;/em>&lt;/p></description></item><item><title>WebSocket.ping()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-ping/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-ping/</guid><content><![CDATA[&lt;h1 id=&#34;websocketping&#34;&gt;WebSocket.ping()&lt;/h1&gt;
&lt;p&gt;Send a ping. You can use ping messages to verify that the remote endpoint is responsive.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection, sends a ping, and closes it using the &lt;code&gt;onopen&lt;/code&gt; handler. The console should log &lt;code&gt;connection is alive&lt;/code&gt;, since the recipient should automatically emit the &lt;code&gt;pong&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onopen = () =&amp;gt; {
    console.log(&amp;#39;WebSocket connection established!&amp;#39;);
    ws.ping();
    ws.close();
  };

  ws.onpong = () =&amp;gt; {
    // As required by the spec, when the ping is received, the recipient must send back a pong.
    console.log(&amp;#39;connection is alive&amp;#39;);
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketping">WebSocket.ping()&lt;/h1>
&lt;p>Send a ping. You can use ping messages to verify that the remote endpoint is responsive.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection, sends a ping, and closes it using the &lt;code>onopen&lt;/code> handler. The console should log &lt;code>connection is alive&lt;/code>, since the recipient should automatically emit the &lt;code>pong&lt;/code> event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onclose</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onclose/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onclose/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonclose&#34;&gt;WebSocket.onclose&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;close&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection, sends a ping, and closes it using &lt;code&gt;onopen&lt;/code&gt; handler.
The console should also log &lt;code&gt;WebSocket connection closed&lt;/code&gt; from the &lt;code&gt;onclose&lt;/code&gt; handler.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onopen = () =&amp;gt; {
    console.log(&amp;#39;WebSocket connection established!&amp;#39;);
    ws.close();
  };

  ws.onclose = () =&amp;gt; {
    console.log(&amp;#39;WebSocket connection closed!&amp;#39;);
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonclose">WebSocket.onclose&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>close&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection, sends a ping, and closes it using &lt;code>onopen&lt;/code> handler.
The console should also log &lt;code>WebSocket connection closed&lt;/code> from the &lt;code>onclose&lt;/code> handler.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onerror</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onerror/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onerror/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonerror&#34;&gt;WebSocket.onerror&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;error&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code&gt;error&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onerror = (e) =&amp;gt; {
    console.log(e);
    ws.close();
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonerror">WebSocket.onerror&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>error&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code>error&lt;/code> event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onmessage</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onmessage/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onmessage/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonmessage&#34;&gt;WebSocket.onmessage&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;message&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code&gt;message&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);
  ws.binaryType = &amp;#39;arraybuffer&amp;#39;;

  ws.onmessage = (data) =&amp;gt; {
    console.log(&amp;#39;a message received&amp;#39;);
    console.log(data);
    ws.close();
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonmessage">WebSocket.onmessage&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>message&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code>message&lt;/code> event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onopen</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onopen/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onopen/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonopen&#34;&gt;WebSocket.onopen&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;open&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code&gt;open&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onopen = () =&amp;gt; {
    console.log(&amp;#39;WebSocket connection established!&amp;#39;);
    ws.close();
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonopen">WebSocket.onopen&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>open&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code>open&lt;/code> event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onping</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onping/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onping/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonping&#34;&gt;WebSocket.onping&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;ping&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code&gt;ping&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;wss://quickpizza.grafana.com/ws&amp;#39;);

  ws.onping = () =&amp;gt; {
    console.log(&amp;#39;A ping happened!&amp;#39;);
    ws.close();
  };

  ws.onclose = () =&amp;gt; {
    console.log(&amp;#39;WebSocket connection closed!&amp;#39;);
  };

  ws.onopen = () =&amp;gt; {
    ws.send(JSON.stringify({ event: &amp;#39;SET_NAME&amp;#39;, new_name: `Croc ${__VU}` }));
  };
  ws.onerror = (err) =&amp;gt; {
    console.log(err);
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonping">WebSocket.onping&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>ping&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and sets up a handler for the &lt;code>ping&lt;/code> event.&lt;/em>&lt;/p></description></item><item><title>WebSocket.onpong</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onpong/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-onpong/</guid><content><![CDATA[&lt;h1 id=&#34;websocketonpong&#34;&gt;WebSocket.onpong&lt;/h1&gt;
&lt;p&gt;A handler for a WebSocket connection &lt;code&gt;pong&lt;/code&gt; event.
For multiple, simultaneous event handlers, use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/&#34;&gt;&lt;code&gt;WebSocket.addEventListener()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A k6 script that initiates a WebSocket connection and setups a handler for the &lt;code&gt;pong&lt;/code&gt; event.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { WebSocket } from &amp;#39;k6/websockets&amp;#39;;

export default function () {
  const ws = new WebSocket(&amp;#39;ws://localhost:10000&amp;#39;);

  ws.onpong = () =&amp;gt; {
    console.log(&amp;#39;A pong happened!&amp;#39;);
    ws.close();
  };

  ws.onopen = () =&amp;gt; {
    ws.ping();
  };
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding example uses a WebSocket echo server, which you can run with the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --detach --rm --name ws-echo-server -p 10000:8080 jmalloc/echo-server&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="websocketonpong">WebSocket.onpong&lt;/h1>
&lt;p>A handler for a WebSocket connection &lt;code>pong&lt;/code> event.
For multiple, simultaneous event handlers, use
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/websocket/websocket-addeventlistener/">&lt;code>WebSocket.addEventListener()&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>&lt;em>A k6 script that initiates a WebSocket connection and setups a handler for the &lt;code>pong&lt;/code> event.&lt;/em>&lt;/p></description></item></channel></rss>