<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Socket on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/</link><description>Recent content in Socket on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/javascript-api/k6-ws/socket/index.xml" rel="self" type="application/rss+xml"/><item><title>Socket.close([code])</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-close/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-close/</guid><content><![CDATA[&lt;h1 id=&#34;socketclosecode&#34;&gt;Socket.close([code])&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&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: 1001)&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;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 ws from &amp;#39;k6/ws&amp;#39;;

export default function () {
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const response = ws.connect(url, null, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function () {
      socket.close();
    });
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="socketclosecode">Socket.close([code])&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.on(event, callback)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-on/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-on/</guid><content><![CDATA[&lt;h1 id=&#34;socketonevent-callback&#34;&gt;Socket.on(event, callback)&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Set up callback functions for various events on the WebSocket connection. Multiple handlers can be defined 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 callback for.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;callback&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-ws/socket/socket-close/&#34;&gt;Socket.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. Non-normal closure errors will be forwarded.&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;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 ws from &amp;#39;k6/ws&amp;#39;;
import { check } from &amp;#39;k6&amp;#39;;

export default function () {
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const params = { tags: { my_tag: &amp;#39;hello&amp;#39; } };

  const response = ws.connect(url, params, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function open() {
      console.log(&amp;#39;connected&amp;#39;);
      socket.send(Date.now());

      socket.setInterval(function timeout() {
        socket.ping();
        console.log(&amp;#39;Pinging every 1sec (setInterval test)&amp;#39;);
      }, 1000);
    });

    socket.on(&amp;#39;ping&amp;#39;, function () {
      console.log(&amp;#39;PING!&amp;#39;);
    });

    socket.on(&amp;#39;pong&amp;#39;, function () {
      console.log(&amp;#39;PONG!&amp;#39;);
    });

    socket.on(&amp;#39;pong&amp;#39;, function () {
      // Multiple event handlers on the same event
      console.log(&amp;#39;OTHER PONG!&amp;#39;);
    });

    socket.on(&amp;#39;message&amp;#39;, function (message) {
      console.log(`Received message: ${message}`);
    });

    socket.on(&amp;#39;close&amp;#39;, function () {
      console.log(&amp;#39;disconnected&amp;#39;);
    });

    socket.on(&amp;#39;error&amp;#39;, function (e) {
      if (e.error() != &amp;#39;websocket: close sent&amp;#39;) {
        console.log(&amp;#39;An unexpected error occured: &amp;#39;, e.error());
      }
    });

    socket.setTimeout(function () {
      console.log(&amp;#39;2 seconds passed, closing the socket&amp;#39;);
      socket.close();
    }, 2000);
  });

  check(response, { &amp;#39;status is 101&amp;#39;: (r) =&amp;gt; r &amp;amp;&amp;amp; r.status === 101 });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="socketonevent-callback">Socket.on(event, callback)&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.ping()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-ping/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-ping/</guid><content><![CDATA[&lt;h1 id=&#34;socketping&#34;&gt;Socket.ping()&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Send a ping. Ping messages can be used to verify that the remote endpoint is responsive.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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 ws from &amp;#39;k6/ws&amp;#39;;

export default function () {
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const response = ws.connect(url, null, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function () {
      socket.on(&amp;#39;pong&amp;#39;, function () {
        // 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;);
      });

      socket.ping();
    });
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="socketping">Socket.ping()&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.send(data)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-send/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-send/</guid><content><![CDATA[&lt;h1 id=&#34;socketsenddata&#34;&gt;Socket.send(data)&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Send a data string 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&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;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 ws from &amp;#39;k6/ws&amp;#39;;

export default function () {
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const response = ws.connect(url, null, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function () {
      socket.send(&amp;#39;my-message&amp;#39;);
      socket.send(JSON.stringify({ data: &amp;#39;hola&amp;#39; }));
    });
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;See also 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-sendbinary/&#34;&gt;Socket.sendBinary(data)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="socketsenddata">Socket.send(data)&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.sendBinary(data)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-sendbinary/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-sendbinary/</guid><content><![CDATA[&lt;h1 id=&#34;socketsendbinarydata&#34;&gt;Socket.sendBinary(data)&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Send binary data through the 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;data&lt;/td&gt;
              &lt;td&gt;ArrayBuffer&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;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 ws from &amp;#39;k6/ws&amp;#39;;

const binFile = open(&amp;#39;./file.pdf&amp;#39;, &amp;#39;b&amp;#39;);

export default function () {
  ws.connect(&amp;#39;http://wshost/&amp;#39;, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function () {
      socket.sendBinary(binFile);
    });

    socket.on(&amp;#39;binaryMessage&amp;#39;, function (msg) {
      // msg is an ArrayBuffer, so we can wrap it in a typed array directly.
      new Uint8Array(msg);
    });
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;See also 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-send/&#34;&gt;Socket.send(data)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="socketsendbinarydata">Socket.sendBinary(data)&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.setInterval(callback, interval)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-setinterval/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-setinterval/</guid><content><![CDATA[&lt;h1 id=&#34;socketsetintervalcallback-interval&#34;&gt;Socket.setInterval(callback, interval)&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Call a function repeatedly, while the WebSocket connection is open.&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;callback&lt;/td&gt;
              &lt;td&gt;function&lt;/td&gt;
              &lt;td&gt;The function to call every &lt;code&gt;interval&lt;/code&gt; milliseconds.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;interval&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;The number of milliseconds between two calls to &lt;code&gt;callback&lt;/code&gt;.&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;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 ws from &amp;#39;k6/ws&amp;#39;;
import { check } from &amp;#39;k6&amp;#39;;

export default function () {
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const params = { tags: { my_tag: &amp;#39;hello&amp;#39; } };

  const res = ws.connect(url, params, function (socket) {
    socket.on(&amp;#39;open&amp;#39;, function open() {
      console.log(&amp;#39;connected&amp;#39;);

      socket.setInterval(function timeout() {
        socket.ping();
        console.log(&amp;#39;Pinging every 1sec (setInterval test)&amp;#39;);
      }, 1000);
    });

    socket.on(&amp;#39;pong&amp;#39;, function () {
      console.log(&amp;#39;PONG!&amp;#39;);
    });
  });

  check(res, { &amp;#39;status is 101&amp;#39;: (r) =&amp;gt; r &amp;amp;&amp;amp; r.status === 101 });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="socketsetintervalcallback-interval">Socket.setInterval(callback, interval)&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item><item><title>Socket.setTimeout(callback, delay)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-settimeout/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-ws/socket/socket-settimeout/</guid><content><![CDATA[&lt;h1 id=&#34;socketsettimeoutcallback-delay&#34;&gt;Socket.setTimeout(callback, delay)&lt;/h1&gt;


&lt;div data-shared=&#34;ws-module.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;A module with a better and standard API exists.
&lt;br&gt;
&lt;br&gt;
The new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-websockets/&#34;&gt;k6/websockets API&lt;/a&gt; partially implements the &lt;a href=&#34;https://websockets.spec.whatwg.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebSockets API living standard&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Call a function at a later time, if the WebSocket connection is still open then.&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;callback&lt;/td&gt;
              &lt;td&gt;function&lt;/td&gt;
              &lt;td&gt;The function to call when &lt;code&gt;delay&lt;/code&gt; has expired.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;delay&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;The delay time, in milliseconds.&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;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 ws from &amp;#39;k6/ws&amp;#39;;
import { sleep } from &amp;#39;k6&amp;#39;;

export default function () {
  console.log(&amp;#39;T0: Script started&amp;#39;);
  const url = &amp;#39;wss://echo.websocket.org&amp;#39;;
  const response = ws.connect(url, null, function (socket) {
    console.log(&amp;#39;T0: Entered WebSockets run loop&amp;#39;);
    socket.setTimeout(function () {
      console.log(&amp;#39;T0&amp;#43;1: This is printed&amp;#39;);
    }, 1000);
    socket.setTimeout(function () {
      console.log(&amp;#39;T0&amp;#43;2: Closing socket&amp;#39;);
      socket.close();
    }, 2000);
    socket.setTimeout(function () {
      console.log(&amp;#39;T0&amp;#43;3: This is not printed, because socket is closed&amp;#39;);
    }, 3000);
  });
  console.log(&amp;#39;T0&amp;#43;2: Exited WebSockets run loop&amp;#39;);
  sleep(2);
  console.log(&amp;#39;T0&amp;#43;4: Script finished&amp;#39;);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="socketsettimeoutcallback-delay">Socket.setTimeout(callback, delay)&lt;/h1>
&lt;div data-shared="ws-module.md">
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>A module with a better and standard API exists.
&lt;br>
&lt;br>
The new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-websockets/">k6/websockets API&lt;/a> partially implements the &lt;a href="https://websockets.spec.whatwg.org/" target="_blank" rel="noopener noreferrer">WebSockets API living standard&lt;/a>.
&lt;br>
&lt;br>
When possible, we recommend using the new API. It uses a global event loop for consistency with other k6 APIs and better performance.&lt;/p></description></item></channel></rss>