initSocketModule
Socket.IO 모듈을 초기화합니다. 소켓 리스너 파일을 자동 로드하고 Socket.IO 서버를 설정합니다.
Import
import { initSocketModule } from '@asapjs/socket';
시그니처
const initSocketModule = async (
server: httpServer,
dirname: string
): Promise<boolean>
파라미터
| 이름 | 타입 | 설명 |
|---|---|---|
server | http.Server | HTTP 서버 인스턴스 (Socket.IO가 이 서버에 바인딩됩니다) |
dirname | string | 소켓 리스너 파일이 위치한 디렉토리 경로. *Socket.* 패턴의 파일을 자동 로드합니다. |
반환값
Promise<boolean> — 초기화 성공 시 true
동작
dirname하위 디렉토리를 재귀 탐색하여*Socket.*파일 로드getConfig().socket설정으로 Socket.IO 서버 생성- Redis 어댑터 설정이 있으면 자동 적용 (pub/sub)
- 클라이언트 연결 시 등록된 리스너 바인딩
사용 예제
import http from 'http';
import { Application } from '@asapjs/core';
import { RouterModule } from '@asapjs/router';
import { initSocketModule } from '@asapjs/socket';
const app = new Application(__dirname);
const router = new RouterModule(__dirname);
const server = http.createServer(router.app);
await initSocketModule(server, __dirname + '/sockets');
server.listen(3000);
소켓 리스너 파일 예시
// src/sockets/ChatSocket.ts
import { createSocket } from '@asapjs/socket';
createSocket(
{ path: 'chat:message' },
async (socket, { body, user }) => {
console.log(`${user.name}: ${body.message}`);
socket.broadcast.emit('chat:message', body);
}
);
설정 (config)
{
"socket": {
"redis": {
"host": "localhost",
"port": 6379
}
}
}
Redis 설정이 없으면 단일 서버 모드로 동작합니다.
관련 API
- createSocket — 소켓 리스너 등록
- getSocketIO — Socket.IO 인스턴스 접근
- socketSendTo — 특정 소켓에 메시지 전송
- socketSendAll — 전체 메시지 브로드캐스트