diff options
Diffstat (limited to 'test/js/web/websocket/websocket-server-echo.mjs')
-rw-r--r-- | test/js/web/websocket/websocket-server-echo.mjs | 94 |
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); |