문제상황:
에러가 발생한 코드와 이에 대한 설명:
const io = require('socket.io-client');
const socket = io('http://localhost:3000');
socket.emit('message', 'Hello, Server!');
socket.on('message', (data) => {
console.log(`Received from server: ${data}`);
});
위 코드는 Socket.IO를 사용하여 서버와 메시지를 주고받는 간단한 클라이언트 예제입니다. 그러나, 이 코드를 실행하면 다음과 같은 에러가 발생합니다.
에러로그 내용:
Error: connection not open on send()
해결방법:
에러가 수정된 코드+ 수정된 부분에 대한 주석:
const io = require('socket.io-client');
const socket = io('http://localhost:3000');
socket.on('connect', () => { // 수정된 부분
socket.emit('message', 'Hello, Server!');
});
socket.on('message', (data) => {
console.log(`Received from server: ${data}`);
});
위 코드에서 수정된 부분은 연결이 완료되고 난 후에만 서버에 메시지를 전송하도록 이벤트 핸들러를 변경한 것입니다.
원인 분석:
에러 발생 원인에 대한 설명:
- 코드는 socket.io를 사용하여 서버와 메시지를 주고받는 간단한 클라이언트 예제입니다.
- 이 코드를 실행하면 "Error: connection not open on send()" 라는 에러가 발생합니다.
- 에러의 원인은 클라이언트가 서버에 메시지를 전송하기 전에 소켓 연결이 완료되지 않았기 때문입니다.
에러 발생 원리와 해결된 코드의 작동 원리 비교:
에러 발생 원리:
- 클라이언트가 서버에 연결을 시도합니다.
- 클라이언트가 서버와의 연결이 완료되기 전에 'message' 이벤트를 서버에 전송하려고 시도합니다.
- 연결이 아직 완료되지 않았기 때문에 에러가 발생합니다.
해결된 코드의 작동 원리:
- 클라이언트가 서버에 연결을 시도합니다.
- 'connect' 이벤트를 이용하여 연결이 완료된 후에만 서버에 메시지를 전송하도록 변경합니다.
- 연결이 완료되면 'message' 이벤트가 서버에 전송되고, 에러가 발생하지 않습니다.
결론적으로, 수정된 코드에서는 'connect' 이벤트를 사용하여 소켓 연결이 완료된 후에만 서버에 메시지를 전송하도록 변경하였습니다. 이로 인해 발생했던 "Error: connection not open on send()" 에러가 해결되었습니다.
참고링크:
728x90