The Pursuit of Happyness

반응형

실행환경 Ubuntu 14.04 LTS / node v0.10.25


다음은 node.js 로 작성한 채팅 서버 코드.

chat.js라는 파일에 다음과 같이 코드를 작성해서 저장.

var net = require('net');
var sockets = [];

var server = net.createServer(
                function(socket) {
                        socket.name = socket.remoteAddress + ":" + socket.remotePort;
                        sockets.push(socket);
                        socket.write("Welcome " + socket.name + "\n");
                        broadcast(socket.name + " joined the chat\n", socket);

                        socket.on('data',
                                function(data) {
                                        broadcast(socket.name + "> " + data, socket);
                                }
                        );

                        socket.on('end',
                                function(data) {
                                        sockets.splice(sockets.indexOf(socket), 1);
                                        broadcast(socket.name + " left the chat.\n");
                                }
                        );
                }
);

function broadcast(message, sender) {
        sockets.forEach(
                function (socket) {
                        if (socket === sender) return;
                        socket.write(message);
                }
        );
}
server.listen(3000);

실행은 nodejs chat 이라고 입력하면 된다.

코드를 살펴보면, 이 채팅 서버는 3000번 포트로 작동한다.

클라이언트에서 접속하면 소켓 IP와 Port를 아이디로 할당하여 sockets 에 저장.

그리고 새로 접속한 클라이언트에게는 서버 Welcome 메시지를 전송하고, 기존의 클라이언트에게는 새로운 유저가 들어왔다는 메시지를 broadcast로  전송.

클라이언트가 끊고 나가는 경우 sockets에서 해당 소켓 정보를 삭제하고 남은 클라이언트 들에게 유저가 나갔다는 메시지를 전달.

 

테스트를 위해서 telnet 을 이용해서 접속을 한다.

telnet [서버IP] 3000

 

텔넷 창을 여러개 띄워서 상대방이 보낸 메시지가 제대로 오는지 확인한다.

반응형

반응형

실행환경 Ubuntu 14.04 LTS / node v0.10.25


다음은 클라이언트가 입력한 값을 그대로 돌려주는 Echo Server를 Node.js 스타일로 작성해 보겠다.

이번 예제에서는 소켓 연결을 위해서 net 모듈을 사용했으며, 3000번 포트로 동작하도록 하였다.

echo.js 라는 파일을 생성하여 아래와 같이 작성한다.

var net = require('net');
var server = net.createServer(
                function(socket) {
                        socket.on('data',
                                function(data) {
                                        socket.write(data);
                                }
                        );
                }
);
server.listen(3000);

실행은 nodejs echo 로 하면 되고, 확인을 위해서 telnet 등을 이용해서 서버에 3000 포트로 접속하면 입력한 값을 되돌려 주는 것을 확인 할 수 있다. 

여기서 socket.on 대신 socket.once 를 사용하면 한번 응답후에 연결을 종료시키도록 할 수 있다.

반응형