본문으로 건너뛰기

initSocketModule

Socket.IO 모듈을 초기화합니다. 소켓 리스너 파일을 자동 로드하고 Socket.IO 서버를 설정합니다.

Import

import { initSocketModule } from '@asapjs/socket';

시그니처

const initSocketModule = async (
server: httpServer,
dirname: string
): Promise<boolean>

파라미터

이름타입설명
serverhttp.ServerHTTP 서버 인스턴스 (Socket.IO가 이 서버에 바인딩됩니다)
dirnamestring소켓 리스너 파일이 위치한 디렉토리 경로. *Socket.* 패턴의 파일을 자동 로드합니다.

반환값

Promise<boolean> — 초기화 성공 시 true

동작

  1. dirname 하위 디렉토리를 재귀 탐색하여 *Socket.* 파일 로드
  2. getConfig().socket 설정으로 Socket.IO 서버 생성
  3. Redis 어댑터 설정이 있으면 자동 적용 (pub/sub)
  4. 클라이언트 연결 시 등록된 리스너 바인딩

사용 예제

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