Node 기반js TCP 채팅 서버 구축

17561 단어
   :zhanhailiang  :2014-11-23

원리:
서버 측은 모든 클라이언트 연결 목록을 유지합니다.

서버가 어떤 클라이언트의 메시지를 받았을 때 다른 클라이언트에게 연결합니다.

클라이언트 연결이 종료되면 클라이언트 연결 목록에서 제거합니다.

구현:
var net = require('net');
var server = net.createServer();
var sockets = [];
 
// accept connection 
server.on('connection', function(socket) {
    console.log('got a new connection');
 
    //  
    sockets.push(socket);
 
    //  
    socket.on('data', function(data) {
        console.log('got data:', data);
        var index = sockets.indexOf(socket);
        sockets.forEach(function(otherSocket) {
            if (otherSocket !== socket) {
                otherSocket.write(new Buffer(index + ' say:'));
                otherSocket.write(data);
            }
        });
    });
 
    //  
    socket.on('close', function() {
        console.log('connection closed');
        var index = sockets.indexOf(socket);
        sockets.splice(index, 1);
    });
});
 
server.on('error', function(err) {
    console.log('Server error:', err.message);
});
 
server.on('close', function() {
    console.log('Server closed');
});
 
server.listen(4001);

전체 코드:https://github.com/billfeller/professional-nodejs/blob/master/chapter10/chat_server.js
서버를 시작하려면:
[root@~/wade/nodejs/professional-nodejs/chapter10]# node chat_server.js 
got a new connection
got a new connection
got a new connection
got data: <Buffer 77 68 61 74 20 69 73 20 79 6f 75 72 20 6e 61 6d 65 0d 0a>
got data: <Buffer 69 20 61 6d 20 62 69 6c 6c 0d 0a>
got data: <Buffer 69 20 61 6d 20 66 65 6c 6c 65 72 0d 0a>
got data: <Buffer 69 20 61 6d 20 7a 75 63 6b 2c 20 6e 69 63 65 20 74 6f 20 6d 65 65 74 20 79 6f 75 0d 0a>
got data: <Buffer 6d 65 0d 0a>
got data: <Buffer 6d 65 0d 0a>
got data: <Buffer 74 6f 6f 0d 0a>

세 개의 클라이언트 연결을 순서대로 시작하고 채팅을 시작합니다.
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
what is your name
1 say:i am bill
2 say:i am feller
i am zuck, nice to meet you
1 say:me
2 say:me
2 say:too
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
0 say:what is your name
i am bill
2 say:i am feller
0 say:i am zuck, nice to meet you
me
2 say:me
2 say:too
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
0 say:what is your name
1 say:i am bill
i am feller
0 say:i am zuck, nice to meet you
1 say:me
me
too

참고: Professional Node.js Chapter10 Building TCP Server

좋은 웹페이지 즐겨찾기