이전 블로그 게시물 인 Socket.io에서 Socket.io의 기본 사용법을 간단히 소개하고 간단한 대화방 데모를 만들었습니다. 소개 장을 기반 으로이 기사는 Socket.io의 고급 사용량을 계속 탐색합니다. 이 기사는 구성, 객실, 이벤트 등에서 시작하여 Socket.io에 실용적인 API 및 예방 조치를 소개합니다.
1. 구성
socket.io 4 개의 구성 API를 제공합니다 : io.configure, io.set, io.enable, io.disable. IO. 세트는 단일 항목을 설정하고 io.enable 및 io.disable은 단일 항목으로 부울 구성을 설정하는 데 사용됩니다. io.configure를 사용하면 다양한 생산 환경 (예 : 개발, 테스트 등)에 대해 다양한 매개 변수를 구성 할 수 있습니다. 다음은 두 가지 환경에서 Socket.io의 다른 구성을 정의합니다.
코드 사본은 다음과 같습니다.
var io = 요구 ( 'socket.io'). 듣기 (80);
io.configure ( '개발', function () {
io.enable ( '브라우저 클라이언트 etag');
io.set ( 'log level', 1);
});
io.configure ( 'release', function () {
io.set ( 'transports', [ 'websocket']);
});
다음은 일반적으로 사용되는 일부 구성 항목을 나열합니다. 특정 구성 매개 변수는 공식 위키를 참조하십시오.
1) .transports (기본 [Websocket ','htmlfile ','xhr-polling ','jsonp-polling ')) : 통신 방법 유형을 포함하는 배열. Socket.io는 WebSocket, Polling 등과 같은 즉각적인 온라인 커뮤니케이션을 실현하는 다양한 방법을 지원합니다.이 구성을 사용하면 백업 통신 메소드를 직접 선택할 수 있습니다.
2) .log 레벨 (기본값 3) : 가장 낮은 수준의 로그 출력, 0은 오류, 1은 경고, 2는 정보이며 3은 디버그이며 모든 유형의 로그는 기본적으로 출력됩니다.
3) .HeartBeat 간격 (기본 25 초) : 심장 박동 패킷 전송 간격으로 클라이언트는이 기간 내에 커뮤니케이션을 유지하기 위해 하트 비트 패킷을 서버로 보내야합니다.
2. 방
객실은 socket.io가 제공하는 매우 유용한 기능입니다. 이 객실은 특정 고객에게 네임 스페이스를 제공하는 것과 같습니다. 방의 모든 방송 및 통신은 방 외부의 고객에게 영향을 미치지 않습니다.
소개에서, 우리는 socket.join ( '객실 이름')을 사용하여 클라이언트에 의해 방에 들어갈 수 있고 socket.leave ( '객실 이름')는 방을 떠나는 데 사용됩니다. 클라이언트가 방에 들어가면 메시지를 방에서 두 가지 방법으로 방송 할 수 있습니다.
코드 사본은 다음과 같습니다.
// 1. 내 방에 이벤트를 방송하면 제출자가 제외됩니다 (즉, 메시지가 접수되지 않습니다).
io.sockets.on ( 'Connection', function (socket) {
// 참고 : 다음과 비교하여 다음과 비교할 때 고객의 관점에서 이벤트를 제출하는 것입니다.
socket.broadcast.to ( 'my room'). emit ( 'event_name', data);
}
// 2. 이벤트를 다른 방으로 방송하면이 방의 모든 고객이 메시지를 받게됩니다.
// 참고 : 위와 비교하여 여기서 서버의 관점에서 이벤트를 제출하는 것입니다.
io.sockets.in ( '다른 방'). emit ( 'event_name', data);
// 모든 고객에게 방송
io.sockets.emit ( 'event_name', data);
방에 메시지를 방송하는 것 외에도 다음 API를 통해 객실 정보를 얻을 수도 있습니다.
코드 사본은 다음과 같습니다.
// 모든 객실에 대한 정보를 얻습니다
// 키는 객실 이름이고 값은 객실 이름에 해당하는 소켓 ID 배열입니다.
io.sockets.manager.rooms
// 특정 객실에서 클라이언트를 가져 와서이 방의 모든 소켓 인스턴스를 반환합니다.
io.sockets.clients ( '특정 방')
// Socket.id를 통해이 소켓에서 입력 한 객실 정보 가져옵니다.
io.sockets.manager.roomclients [socket.id]
3. 이벤트
socket.io에는 몇 가지 내장 기본 이벤트가 있습니다. 이벤트를 설계 할 때는 기본 이벤트 이름을 피하고 이러한 기본 이벤트를 유연하게 사용해야합니다.
서버 측 이벤트 :
1) .io.sockets.on ( 'Connection', function (socket) {}) : 소켓 연결이 성공한 후 트리거되어 초기화에 사용됩니다.
socket.on ( 'message', function (메시지, 콜백) {}) :이 이벤트는 클라이언트가 Socket.Send를 통해 메시지를 전송할 때 트리거됩니다. 메시지는 전송 된 메시지입니다. 콜백은 메시지를 수신 한 후 실행되는 콜백입니다.
2) .socket.on ( 'ally', function (data) {}) : 이벤트가 접수 될 때 해고되었습니다
3) .socket.on ( 'Distroncnect', function () {}) : 소켓이 연결을 잃을 때 트리거 (브라우저를 닫는 것과 같은 연결 끊기 상황 포함, 적극적으로 분리, 분리 등).
클라이언트 이벤트 :
1) .connect : 연결이 성공적입니다
2). 연결 : 연결
3). Disconnect : 분리
4) .connect_failed : 연결이 실패했습니다
5) .ERROR : 오류가 발생했으며 다른 이벤트 유형으로 처리 할 수 없습니다.
6) Message : 동일한 서버 측 메시지 이벤트
7)
8) .reconnect_failed : 다시 연결이 실패했습니다
9). Reconnect : 성공적으로 다시 연결
10). 다시 연결 : 다시 연결
여기서는 클라이언트 소켓이 연결을 시작할 때 순서를 언급해야합니다. 첫 번째 연결이 연결되면 이벤트 트리거 순서는 다음과 같습니다. Connect-> Connect; 연결이 손실되면 이벤트 트리거 순서는 다음과 같습니다. Disternect-> Reconnecting (여러 번 수행 될 수 있음)-> Connecting-> Reconnect-> Connect-> Connect입니다.
4. 승인
1). 모든 클라이언트에게 방송 : socket.broadcast.emit ( '방송 메시지');
2). 방에 입력하십시오 (사용하기가 매우 쉽습니다! 네임 스페이스와 동일하며, 다른 방에서 고객에게 영향을 미치지 않거나 방에없는 특정 객실로 방송 될 수 있음) : Socket.join ( '객실 이름');
3). 방에 방송 메시지 (발신자가 메시지를받을 수 없음) : socket.broadcast.to ( 'room room name'). emit ( '방송실 메시지');
4). 방에 방송 메시지 (발신자가 메시지를받을 수 있음) (이 API는 io.sockets에 속합니다) : io.sockets.in ( '다른 방 이름'). emit ( '방송실 메시지');
5). WebSocket Communication : (클라이언트) socket.send ( 'hi'), (Server) Socket.on ( 'message', function (data) {})를 사용하여 수신합니다.
이것은 기본적으로 Socket.io의 고급 사용에 대한 소개입니다. 나는 개인적 으로이 기본 API가 매일 사용하기에 충분하다고 생각하며, 이는 Socket.io의 매우 간단하고 사용하기 쉬운 디자인 철학을 반영합니다. 이 기사는 주목을 끌 수있는 방법 일뿐입니다. 실제 사용으로 해결할 수없는 문제가 발생하면 공식적인 세부적인 위키를 확인하는 것이 좋습니다.