본문으로 건너뛰기

홈채널

서버는 접속한 클라이언트의 IP 주소를 압니다. 대부분의 집과 사무실은 공유기(NAT)로 외부 IP 하나를 함께 쓰므로, 서버는 같은 외부 IP로 접속한 연결을 한 그룹으로 묶을 수 있습니다. 이 그룹끼리 통신하도록 서버가 자동으로 제공하는 채널이 홈채널입니다.

홈채널은 신원 확인이나 권한 경계가 아닙니다. NAT, 프록시, VPN, 공유 네트워크에서는 서로 다른 사용자가 같은 주소로 보일 수 있고, 연결 경로가 바뀌면 그룹도 달라집니다.

사용법​

채널 이름을 생략하고 #topic만 쓰면 홈채널입니다.

io.listen('#topic', (tag, ...args) => console.log(tag, args));
// 수신 측이 구독한 뒤 보냅니다.
io.signal('#topic');

같은 홈채널 안에서 같은 태그를 구독한 클라이언트만 받습니다. channel#topic과 channel은 명시적 채널이며 홈채널이 아닙니다.

EMPTY로 보내면 JS는 handler(tag)로 호출되어 ...args는 []입니다. signal('#topic', null)로 보낸 null과는 구별됩니다. Arduino는 payloadType이 EMPTY, payloadSize가 0이므로 payload를 읽지 않습니다.

그룹 유형​

서버는 자신이 본 주소로 연결을 묶습니다. 서버 네트워크 밖에서 접속한 클라이언트는 공인 IP가 같은 것끼리 한 홈채널이 됩니다. 서버와 같은 사설망에서 접속한 클라이언트와 서버 안에서 실행된 클라이언트는 별도의 Private 홈채널로 묶입니다. 그래서 집 안 서버와 클라우드 서버 모두에서 홈채널을 쓸 수 있습니다.

서버와 같은 사설망이나 서버 내부에서 접속한 장치는 Private 홈채널로, 외부에서 접속한 장치는 공인 IP가 같은 것끼리 각각의 홈채널로 묶임

활용​

  • 장치 검색과 알림: 채널 이름을 미리 정하거나 공유하지 않아도 같은 장소의 장치를 찾을 수 있습니다. 집에서 웹앱을 열면 집의 장치가, 사무실에서 열면 사무실의 장치가 검색됩니다.
  • 체크인 감지: Wi-Fi에 자동 접속하는 장치나 스마트폰 웹앱이 서버에 연결되면, 같은 홈채널의 다른 장치가 도착을 알 수 있습니다.

보호가 필요한 데이터와 제어 명령에는 별도의 인증과 권한 검사를 적용하세요. 전달 데이터 형식은 데이터 형식을 참고하세요.