서로 에코만 하는게 부족하다면 유닉스의 wall 채팅을 구현해보자.
사실 이것만 되면
누가 접속했는지도 알고
누가 누구한테 무얼 보낼 수 있는지도 아는 셈이므로
채팅방을 하든지
온라인대전 격투게임 서버를 만들던지
바카라(어이쿠 위험한 단어) 서버를 만들던지
엠엠오알피지 서버를 만들던지
알아서 주무르면 된다.
자 그럼 이 대단한 서버의 코드를 보자
var clients = [];
require('net').createServer(function(socket) {
socket.on("connect", function() {
clients.push(socket);
});
socket.on("close", function() {
clients.splice(clients.indexOf(socket), 1);
});
socket.on("data", function(data) {
var sender = this;
clients.forEach(function(client) {
if (client !== sender) client.write(data);
});
});
}).listen(1337,"0.0.0.0");
네트워크 프로그래밍 좀 해본 사람이라면 다리에 힘이 턱 풀릴 정도로 허무한 코드라고 할 수 있겠다.
코드를 위에서부터 말로 쭉 설명하자면
1. 빈 접속자 배열을 만든다.
2. connect 할때마다 접속자 배열에 해당 소켓을 추가한다.
3. close 하면 socket 의 위치를 찾아(indexOf) 해서 떼어낸다(splice)
4. data 즉 접속자로 부터 입력을 받으면 자기 자신이 아닌 다른 모든 소켓에게 쓰기를 한다.
5. 이 모든 것을 1337번 포트에 연다.
정말 간단하다.
댓글
댓글 쓰기