socket.writable.getWriter().write() hangs at 7th write
hello, i have a Cloudflare Workers to act like a "server ping service" using
however, at the
cloudflare:socketscloudflare:sockets. Below is my code for pinging an IP address using sockets, with amountamount time, and serverserver is the WebSockets Server connected to client for sending back the ping data:const pingServer = async () => {
for (let i = 0; i < amount; i++) {
try {
server.send(JSON.stringify({ message: "connecting" }));
const start = Date.now();
const socket = await connect({
hostname: ip,
port,
});
server.send(JSON.stringify({ message: "connected, getting writer" }));
const writer = socket.writable.getWriter()
const randomData = new Uint8Array(32);
crypto.getRandomValues(randomData);
server.send(JSON.stringify({ message: `operation ${i+1}, writing data ${randomData}` }));
await writer.write(randomData);
server.send(JSON.stringify({ message: "data written, waiting for read" }));
// Read with a timeout
const delay = await Promise.race([
(async () => {
await socket.readable.getReader().read();
return Date.now() - start;
})(),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("Timed out")), timeout)
),
]);
server.send(JSON.stringify({ success: true, delay: delay }));
server.send(JSON.stringify({ message: "closing connection" }));
socket.close();
server.send(JSON.stringify({ message: "connection closed" }));
} catch (err) {
server.send(
JSON.stringify({ success: false, delay: -1, error: err.message })
);
}
await new Promise((resolve) => setTimeout(resolve, timeout));
}
server.close();
};const pingServer = async () => {
for (let i = 0; i < amount; i++) {
try {
server.send(JSON.stringify({ message: "connecting" }));
const start = Date.now();
const socket = await connect({
hostname: ip,
port,
});
server.send(JSON.stringify({ message: "connected, getting writer" }));
const writer = socket.writable.getWriter()
const randomData = new Uint8Array(32);
crypto.getRandomValues(randomData);
server.send(JSON.stringify({ message: `operation ${i+1}, writing data ${randomData}` }));
await writer.write(randomData);
server.send(JSON.stringify({ message: "data written, waiting for read" }));
// Read with a timeout
const delay = await Promise.race([
(async () => {
await socket.readable.getReader().read();
return Date.now() - start;
})(),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("Timed out")), timeout)
),
]);
server.send(JSON.stringify({ success: true, delay: delay }));
server.send(JSON.stringify({ message: "closing connection" }));
socket.close();
server.send(JSON.stringify({ message: "connection closed" }));
} catch (err) {
server.send(
JSON.stringify({ success: false, delay: -1, error: err.message })
);
}
await new Promise((resolve) => setTimeout(resolve, timeout));
}
server.close();
};however, at the
await writer.write(randomData);await writer.write(randomData);, this always hang at 7th operation and I don't know why. can someone help me with this?
