이전 블로그 Socket.IO에서는 Socket.IO의 기본 사용법을 간략하게 소개하고 간단한 채팅방 DEMO를 만들어 보았습니다. 소개 장을 기반으로 이 기사에서는 계속해서 Socket.IO의 고급 사용법을 탐색합니다. 이 글은 구성, 룸, 이벤트 등으로 시작하여 Socket.IO의 실용적인 API와 주의사항을 소개합니다.
1. 구성
Socket.IO는 io.configure, io.set, io.enable, io.disable의 4가지 구성 API를 제공합니다. 그 중 io.set은 단일 항목을 설정하고, io.enable과 io.disable은 Boolean 구성으로 단일 항목을 설정하는 데 사용됩니다. io.configure를 사용하면 다양한 프로덕션 환경(예: 개발, 테스트 등)에 대해 다양한 매개변수를 구성할 수 있습니다. 다음은 개발 및 릴리스 환경에서 다양한 Socket.IO 구성을 정의합니다.
io.configure('개발', function(){
io.enable('브라우저 클라이언트 etag');
io.set('로그 수준', 1);
});
io.configure('release', function(){
io.set('transports', ['websocket']);
});
다음은 일반적으로 사용되는 일부 구성 항목 목록입니다. 특정 구성 매개변수는 공식 WIKI를 참조하세요
1).transports (기본값 ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']): 통신 방법 유형을 포함하는 배열입니다. Socket.IO는 웹소켓, 폴링 등과 같은 온라인 인스턴트 통신을 달성하는 다양한 방법을 지원합니다. 이 구성을 사용하면 대체 통신 방법을 선택할 수 있습니다.
2).log 수준(기본값 3): 로그 출력의 가장 낮은 수준으로 0은 오류, 1은 경고, 2는 정보, 3은 디버그이며 기본값은 모든 유형의 로그를 출력하는 것입니다.
3).하트비트 간격(기본값 25초): 하트비트 패킷 전송 간격입니다. 클라이언트는 통신을 유지하기 위해 이 시간 내에 서버에 하트비트 패킷을 보내야 합니다.
2. 방
Room은 Socket.IO에서 제공하는 매우 유용한 기능입니다. 룸은 일부 지정된 클라이언트에 대한 네임스페이스를 제공하는 것과 동일합니다. 룸 내의 모든 브로드캐스트 및 통신은 룸 외부의 클라이언트에 영향을 주지 않습니다.
소개 장에서 우리는 클라이언트가 방에 들어갈 때 소켓.join('방 이름')을 사용할 수 있고 방을 나갈 때 소켓.leave('방 이름')을 사용할 수 있다는 것을 알았습니다. 클라이언트가 방에 들어가면 다음 두 가지 방법으로 방에 메시지를 방송할 수 있습니다.
///2. 다른 방에 이벤트를 방송하면 이 방에 있는 모든 클라이언트가 메시지를 받게 됩니다
//참고: 위와 비교하면 서버 관점에서 이벤트 제출이 발생합니다
io.sockets.in('다른 방').emit('event_name', data);
//모든 고객에게 방송
io.sockets.emit('event_name', data);
방에 메시지를 방송하는 것 외에도 다음 API를 통해 방 정보를 얻을 수도 있습니다.
//특정 방에 클라이언트를 가져오고 이 방에 있는 모든 소켓 인스턴스를 반환합니다
io.sockets.clients('특정 방')
//socket.id를 통해 이 소켓이 입력한 방 정보를 가져옵니다
io.sockets.manager.roomClients[socket.id]
3. 이벤트
Socket.IO에는 몇 가지 기본 이벤트가 내장되어 있습니다. 이벤트를 디자인할 때 기본 이벤트 이름을 피하고 이러한 기본 이벤트를 유연하게 사용해야 합니다.
서버 측 이벤트:
1).io.sockets.on('connection', function(socket) {}): 소켓 연결 성공 후 트리거되며 초기화에 사용됩니다.
소켓.on('message', function(message, callback) {}): 클라이언트가 소켓.send를 통해 메시지를 전송할 때 이 이벤트가 트리거됩니다. message는 전송된 메시지이고, callback은 수신 후 실행되는 콜백입니다. 메시지
2).socket.on('anything', function(data) {}): 이벤트가 수신되면 트리거됩니다
3).socket.on('disconnect', function() {}): 소켓의 연결이 끊어지면 트리거됩니다(브라우저 닫기, 적극적으로 연결 끊기, 연결 끊기 등 연결 끊김 상황 포함)
클라이언트 이벤트:
1).connect: 연결 성공
2).연결: 연결
3).disconnect: 연결 끊기
4).connect_failed:연결 실패
5).error: 오류가 발생하여 다른 이벤트 유형으로 처리할 수 없습니다.
6).message : 서버측 메시지 이벤트와 동일
7).anything: 서버측 Anything 이벤트와 동일
8).reconnect_failed: 재연결 실패
9).reconnect: 재접속 성공
10).reconnecting : 다시 연결하는 중
여기서 클라이언트 소켓이 연결을 시작하는 순서를 언급해야 합니다. 처음 연결하는 경우 이벤트 트리거 순서는 연결 -> 연결입니다. 연결이 끊어지면 이벤트 트리거 순서는 연결 끊기 -> 다시 연결(여러 번 가능) -> 연결 -> 다시 연결 -입니다. >
4. 승인
1) 모든 클라이언트에 브로드캐스트: 소켓.broadcast.emit('브로드캐스트 메시지');
2) 방에 입장합니다(사용하기 매우 쉽습니다! 이는 네임스페이스와 동일하며 다른 방에 있거나 방에 있지 않은 클라이언트에게 영향을 주지 않고 특정 방에 브로드캐스팅할 수 있습니다). );
3) 방에 메시지를 브로드캐스트합니다(발신자는 메시지를 받을 수 없음): Socket.broadcast.to('방 이름').emit('broadcast room message');
4) 방에 메시지를 브로드캐스트합니다(발신자가 메시지를 받을 수 있음)(이 API는 io.sockets에 속함): io.sockets.in('다른 방 이름').emit('broadcast room message ' );
5) WebSocket 통신 사용을 강제합니다: (클라이언트) 소켓.send('hi'), (서버) 수신하려면 소켓.on('message', function(data){})을 사용합니다.
Socket.IO의 고급 사용법에 대한 소개는 기본적으로 여기서 끝납니다. 개인적으로 이러한 기본 API는 일상적인 사용에 충분하다고 생각하며 이는 Socket.IO의 매우 간단하고 사용하기 쉬운 디자인 철학을 반영합니다. 이 글은 단지 소개일 뿐입니다. 실제 적용에서 해결할 수 없는 문제가 발생하면 공식 상세 위키를 확인하는 것이 좋습니다.