Tích hợp liên dịch vụ & Kiểm thử
Tích hợp liên dịch vụ
Các dịch vụ BANA khác có thể gửi tin nhắn đến client WebSocket của Signal bằng cách tạo WebSocketEmitter dùng chung kết nối Redis.
Ví dụ: Payment Service
Package @nx/payment sử dụng WebSocketEmitter để thông báo cho client về các sự kiện thanh toán:
// packages/payment/src/components/websocket.component.ts
const emitter = new WebSocketEmitter({
identifier: 'payment-ws-emitter',
redisConnection: redis, // Cùng Redis với Signal
});
await emitter.configure();// Sử dụng trong payment service
await emitter.broadcast({ event: 'payment.success', data: { orderId: '123' } });
await emitter.toClient({ clientId: 'abc', event: 'payment.status', data: { status: 'settled' } });Emitter publish lên Redis, và WebSocketServerHelper của Signal subscribe cùng channels. Tin nhắn được gửi đến các client WebSocket phù hợp với mã hóa tự động qua outbound transformer.
Kiểm thử
Client test tương tác
Package bao gồm một client test HTML tương tác tại resources/websocket-test.html với bố cục 3 panel:
Panel trái — Điều khiển WebSocket:
- Quản lý kết nối WebSocket với URL có thể cấu hình
- Tạo cặp khóa ECDH P-256 tự động
- Xác thực JWT Bearer token
- Mã hóa/giải mã thời gian thực với AES-256-GCM (sử dụng salt từ server)
- Thao tác tham gia/rời phòng
- Gửi sự kiện tùy chỉnh (đã mã hóa)
- Huy hiệu trạng thái kết nối, mã hóa, và hiển thị client ID
Panel giữa — Kiểm thử REST API:
- URL gốc REST có thể cấu hình
- GET /status — kiểm tra trạng thái sẵn sàng
- GET /clients — liệt kê tất cả client đang kết nối
- GET /client theo ID — xem thông tin client cụ thể
- POST /broadcast — gửi đến tất cả client
- POST /send to client — gửi đến client cụ thể
- POST /send to room — gửi đến phòng
- POST /disconnect — buộc ngắt kết nối client
- Panel hiển thị phản hồi
Panel phải — Nhật ký sự kiện:
- Nhật ký sự kiện có mã màu (đến, đi, crypto, REST, lỗi)
- Tự cuộn với dấu thời gian
Mở file trong trình duyệt, cấu hình URL WebSocket, Bearer token, và ECDH info, sau đó nhấn Connect để kiểm thử toàn bộ luồng handshake và giao tiếp mã hóa. Sử dụng panel REST API để kiểm thử gửi tin nhắn từ phía server.