WebSocket 브로드캐스팅을 활용한 실시간 서버 구축
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상: Rust 언어 및
hyperlane
프레임워크를 사용하는 웹 서버 개발자 - 난이도: 중간 (비동기 처리 및 WebSocket 프로토콜 이해 필요)
핵심 요약
hyperlane
은 WebSocket 프로토콜을 자동으로 처리하며,send_response_body
메서드를 통해 서버-클라이언트 간 메시지 전송 가능- 브로드캐스팅은
hyperlane-broadcast
라이브러리를 사용해 다중 클라이언트 간 실시간 메시지 공유 가능 - 클라이언트는
WebSocket
객체를 통해 서버에 시간 정보 전송 및 브로드캐스트 수신 가능 (JavaScript 예제 제공)
섹션별 세부 요약
1. `hyperlane`의 WebSocket 지원
hyperlane
은 WebSocket 프로토콜을 natively 지원하며, 프로토콜 업그레이드를 자동 처리send_response
메서드 사용 시 WebSocket 형식에 맞지 않는 응답으로 인해 클라이언트 파싱 오류 발생 가능- 예시 코드:
```rust
pub async fn handle(ctx: Context) {
let request_body: Vec
ctx.send_response_body(request_body).await;
}
```
2. 브로드캐스팅 구현
- 브로드캐스팅은
hyperlane-broadcast
라이브러리를 사용해 구현 tokio::select
를 통해 동시에 클라이언트 메시지 수신 및 브로드캐스트 채널 데이터 수신 가능enable_inner_websocket_handle
이 활성화되지 않은 경우, 클라이언트가 최소한의 메시지 전송 필요 (예: 빈 메시지)- 브로드캐스트 채널 초기화 예시:
```rust
static BROADCAST_CHANNEL: OnceLock
fn ensure_broadcast_channel() -> Broadcast
BROADCAST_CHANNEL.get_or_init(|| Broadcast::default()).clone()
}
```
3. 클라이언트 예제 (JavaScript)
- 클라이언트는
WebSocket
객체를 통해 서버에 1초 간격으로 시간 정보 전송 - 서버에서 브로드캐스팅된 메시지 수신 시
onmessage
이벤트로 로깅 - 예시 코드:
```javascript
const ws = new WebSocket('ws://localhost:60000/websocket');
ws.onopen = () => {
setInterval(() => {
ws.send(Now time: ${new Date().toISOString()}
);
}, 1000);
};
ws.onmessage = (event) => {
console.log('Receive: ', event.data);
};
```
결론
hyperlane
을 사용하면 WebSocket 핸드셰이크 및 프로토콜 복잡성을 수동으로 관리할 필요 없이 실시간 서비스 개발이 간소화됨- 브로드캐스팅 구현 시
hyperlane-broadcast
라이브러리와send_response_body
메서드 사용 필수 - 클라이언트는 JavaScript 기반 WebSocket API를 통해 서버와 실시간 상호작용 가능