본문 바로가기
코딩

[Node.js] 소켓으로 통신하기 2편

by KRonae 2022. 10. 27.
반응형

1편: https://kronae.com/entry/Nodejs-소켓으로-통신하기-1편

 

하지만 아직 부족한 게 남아있습니다.

지금은 연결 되었을 때에만 통신을 하지만, 정말 제대로 통신을 하려면

메시지를 주고 받을 수 있어야 합니다.

 

1. readline 모듈

readline 모듈은 콘솔에 입력한 글자를 받아올 때 사용합니다.

이 모듈은 nodejs 를 설치하면 기본적으로 같이 설치되는 모듈이기 때문에

socket.io 같이 별도의 설치가 필요하지 않습니다.

 

2. 실습 - 1

그럼 readline 모듈을 이용해 글자를 받아 볼까요?

socketServer.js 와 socketClient.js의 윗쪽에 다음과 같은 코드를 추가합니다.

const readline = require("readline");

그 다음 아래의 코드를 추가해서 readline 인터페이스를 만듭니다. (모든 파일에)

var readlineInterface = readline.createInterface({
    "input": process.stdin
});

이대로 실행하면 글자를 적을 수 있지만, 엔터를 눌렀을 때 아무 반응이 없습니다.

각 파일에 다음과 같은 코드를 추가하면(서버파일에서는 connection 안에, 클라이언트파일에서는 마지막에 적습니다)

readlineInterface.on("line", function(answer) {
    socket.emit("msg", answer);
});

아! 그리고, 서버파일 connection 안에, 다음과 같은 코드도 작성해야 합니다.

socket.on("msg", function(data) {
    console.log("MSG:", data);
});

이제 완성입니다.

완성된 코드:

// socketServer.js

const http = require("http");
const socketIo = require("socket.io");
const readline = require("readline");

const app = http.createServer();
const io = socketIo(app, {"cors": { "origin": "*" }});

var readlineInterface = readline.createInterface({
    "input": process.stdin
});

app.listen(4000, function() {
    console.log("Started the server.");
});

io.on("connection", function(socket) {
    console.log("소켓 연결됨:", socket.id);
    socket.emit("msg", "Connected!");
    socket.on("msg", function(data) {
        console.log("MSG:", data);
    });
    readlineInterface.on("line", function(answer) {
        socket.emit("msg", answer);
    });
});
// socketClient.js

const socketIo = require("socket.io-client");
const readline = require("readline");

var readlineInterface = readline.createInterface({
    "input": process.stdin
});

var socket = new socketIo("http://localhost:4000");

socket.on("msg", function(data) {
    console.log("MSG:", data);
});

readlineInterface.on("line", function(answer) {
    socket.emit("msg", answer);
});

이제 실행해 보면,

메시지를 주고 받을 수 있게 되었습니다.

 

지금까지, 소켓으로 통신하기 였는데요,

유익하셨다면 공감 많이많이 눌러주시면 감사하겠습니다.

 

이상 크로네였습니다.

반응형

댓글