실패 처리
프로덕션의 실시스템은 시스템 실패를 처리 할 수 있어야합니다. 고려해야 할 가장 일반적인 실패 원인 중 하나는 연결 불량에 대한 가능성입니다.
SC의 이벤트 관련 메소드는 서버가 액션을 확인할 때 '콜백'함수를 최종 인수로 사용합니다. 메서드가 실패하면 콜백은 인수로 오류를 받습니다.이 경우 메서드 호출을 다시 시도하거나 사용자에게 메시지를 표시하여 문제를 알릴 수 있습니다.
다양한 오류를 처리하는 방법은 다음과 같습니다. (샘플 코드)
Client측
보내기
// Client code콜백 인수를 전달하지 않으면 emit 메소드가 실패하지 않습니다. 이 경우 emit 호출은 이벤트를 중요도 낮음 (휘발성)으로 처리합니다. 이 기능은 초당 여러 번 이벤트를 내보내고 가끔 실패하는 경우 신경 쓰지 않는 경우에 유용합니다. emit 메소드에 콜백을 전달하면 상대에게 명시적으로 응답을 보내야 합니다. (그렇지 않으면 콜백이 시간 초과됩니다):
socket.emit('ping', 'This is a ping', function (err) {
if (err) {
// 보내기 이벤트 실패, 재시도 혹은 사용자에게 계속할지 여부를 물어봄.
} else {
// 보내기 이벤트 성공
}
});
// Server coderes 함수의 첫 번째 인수는 오류(모든 JSON 호환 타입 또는 객체)입니다. 일반 메시지(오류 없음)를 보낼 경우 첫 번째 인수를 null로 해야합니다. 원하는 경우: res (123, 'This is the error message') 이와 같이 첫 번째 인수를 오류 코드로 사용할 수 있습니다.
socket.on('ping', function (data, res) {
// ...
if (success) {
res(null, 'Success'); // 성공 메시지 돌려주기
} else {
res('Error message'); // 오류 반환
}
});
발행하기
// Client code
socket.publish('pong', 'This is a pong', function (err) {
if (err) {
// 발행 실패, 재시도 혹은 사용자에게 계속할지 여부를 물어봄.
} else {
// 발행 성공
}
});
구독하기
// Client codevar pongChannel = socket.subscribe('pong');
pongChannel.on('subscribeFail', function (err, channelName) {
// 구독 실패 처리
});
pongChannel.on('subscribe', function (channelName) {
// 구독 성공 처리
});
// pong 채널에서 발행한 데이터 다루기
pongChannel.watch(function (data) {
// pong 채널이 데이터를 발행할 때 마다 실행합니다.
});
Server-side
보내기
// Server code콜백을 제공하면 클라이언트에서 응답을 보내야합니다:
socket.emit('ping', 'This is a ping', function (err) {
if (err) {
// Failed to emit event, retry or log?
} else {
// Event was emitted successfully
}
});
// Client code
socket.on('ping', function (data, res) {
// ...
if (success) {
res(null, 'Success'); // 성공 메시지 돌려주기
} else {
res('Error message'); // 오류 반환
}
});
발행하기
// Server codesocket.exchange.publish('pong', 'This is a pong', function (err) {
if (err) {
// 발행 이벤트 실패. 재시도 혹은 로그?
} else {
// 이벤트 성공
}
});
댓글
댓글 쓰기