Skip to main content
WebSocket

Message Ordering & Sequencing

SubscribeValidateExpert

Description

Ensure messages are processed in correct order with sequence numbers.

Test Scenario

// Test: Message ordering guarantee
let expectedSeq = 0;
const buffer: Map<number, any> = new Map();

ws.onmessage = (e) => {
  const msg = JSON.parse(e.data);

  if (msg.seq === expectedSeq) {
    processMessage(msg);
    expectedSeq++;

    // Process buffered messages
    while (buffer.has(expectedSeq)) {
      processMessage(buffer.get(expectedSeq)!);
      buffer.delete(expectedSeq);
      expectedSeq++;
    }
  } else if (msg.seq > expectedSeq) {
    buffer.set(msg.seq, msg); // Buffer future message
  }
  // Ignore duplicate (seq < expected)
};

Testing Tips

  • •Add sequence numbers to messages
  • •Buffer out-of-order messages
  • •Request retransmission for gaps
// Playwright API Testing - WebSocket
import { test, expect } from '@playwright/test';
test('WebSocket connection', async ({ page }) => {
// Listen for WebSocket connections
const wsPromise = page.waitForEvent('websocket');
await page.goto('/websocket-demo');
const ws = await wsPromise;
expect(ws.url()).toContain('ws://');
// Wait for message
const framePromise = ws.waitForEvent('framereceived');
const frame = await framePromise;
expect(frame.payload).toBeDefined();
});

Challenge ID: ws-message-ordering

2 frameworks available