Mỗi cột là một socket độc lập (hai JWT / hai user). Cùng roomId để so sánh: hai bức tranh nên
khớp số cá và vị trí (mô phỏng bơi client-side từ spawnedAt + entryEdge +
lane). Cá = hình tròn, màu theo fishTypeId. Trước đó: REST join phòng cho từng user.
← Trang socket test
Chấm nhỏ: player_fired (màu theo userId). Vòng vàng: fish_killed.
Cùng logic canvas A — dùng để kiểm tra đồng bộ multiplayer.