aboutsummaryrefslogtreecommitdiff
path: root/test/js/web/websocket/websocket-server-echo.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'test/js/web/websocket/websocket-server-echo.mjs')
-rw-r--r--test/js/web/websocket/websocket-server-echo.mjs94
1 files changed, 94 insertions, 0 deletions
diff --git a/test/js/web/websocket/websocket-server-echo.mjs b/test/js/web/websocket/websocket-server-echo.mjs
new file mode 100644
index 000000000..7ce1b205b
--- /dev/null
+++ b/test/js/web/websocket/websocket-server-echo.mjs
@@ -0,0 +1,94 @@
+import { createServer } from "node:http";
+import { WebSocketServer } from "ws";
+
+const server = createServer();
+const wss = new WebSocketServer({
+ perMessageDeflate: false,
+ noServer: true,
+});
+
+server.on("listening", () => {
+ const { address, port, family } = server.address();
+ const { href } = new URL(family === "IPv6" ? `ws://[${address}]:${port}` : `ws://${address}:${port}`);
+ console.log(href);
+ console.error("Listening:", href);
+});
+
+server.on("request", (request, response) => {
+ console.error("Received request:", { ...request.headers });
+ response.end();
+});
+
+server.on("clientError", (error, socket) => {
+ console.error("Received client error:", error);
+ socket.end();
+});
+
+server.on("error", error => {
+ console.error("Received error:", error);
+});
+
+server.on("upgrade", (request, socket, head) => {
+ console.error("Received upgrade:", { ...request.headers });
+
+ socket.on("data", data => {
+ console.error("Received bytes:", data);
+ });
+
+ wss.handleUpgrade(request, socket, head, ws => {
+ wss.emit("connection", ws, request);
+ });
+});
+
+wss.on("connection", (ws, request) => {
+ console.error("Received connection:", request.socket.remoteAddress);
+
+ ws.on("message", message => {
+ console.error("Received message:", message);
+ ws.send(message);
+
+ if (message === "ping") {
+ console.error("Sending ping");
+ ws.ping();
+ } else if (message === "pong") {
+ console.error("Sending pong");
+ ws.pong();
+ } else if (message === "close") {
+ console.error("Sending close");
+ ws.close();
+ } else if (message === "terminate") {
+ console.error("Sending terminate");
+ ws.terminate();
+ }
+ });
+
+ ws.on("ping", data => {
+ console.error("Received ping:", data);
+ ws.ping(data);
+ });
+
+ ws.on("pong", data => {
+ console.error("Received pong:", data);
+ ws.pong(data);
+ });
+
+ ws.on("close", (code, reason) => {
+ console.error("Received close:", code, reason);
+ });
+
+ ws.on("error", error => {
+ console.error("Received error:", error);
+ });
+});
+
+server.on("close", () => {
+ console.error("Server closed");
+});
+
+process.on("exit", exitCode => {
+ console.error("Server exited:", exitCode);
+});
+
+const hostname = process.env.HOST || "127.0.0.1";
+const port = parseInt(process.env.PORT) || 0;
+server.listen(port, hostname);