JSFiddle - React, Tailwind, and code Playground

HTML

<button id ="button" onclick="testClose()">
test
</button>

JavaScript

openWebsocket("test")
console.clear();

// Open websocket
function openWebsocket(channels) {
  var self = window;

  if (self.reconnectTimeout) {
    clearTimeout(self.reconnectTimeout);
    self.reconnectTimeout = undefined;
  }

  this.websocket = new WebSocket("ws://localhost:8080");

  this.websocket.onopen = function () {
    self.websocket.send(JSON.stringify({ channels: channels }));
    console.log('WebSocket Client Connected');
  };

  this.websocket.onclose = function (event) {
    console.log('WebSocket Client Closed', event.code);
    // Retry connection if not closed intentionally
    if (event.code != 4000) {
      if (self.reconnectTimeout) {
        clearTimeout(self.reconnectTimeout);
        self.reconnectTimeout = undefined;
      }
      setTimeout(self.openWebsocket.bind(self, channels), 5000);
    }
  };

  this.websocket.onmessage = function (e) {
    console.log(e);
  };
}

function testClose(){
window.websocket.close(4000, "manual close");
}