用Node.js实现群聊

在这篇文章里,我展示一下怎么用Node.js实现一个简单的群聊聊天功能,代码只有短短30行,却能实现这样一个功能,不得不赞叹Node.js的强大。

一段视频

这段视频展示了Node.js实现的群聊效果。我首先打开了一个终端窗口,执行了服务器端程序。

node test.js

随后,打开3个终端窗口,作为客户端,在每个客户端中请求连接群聊服务。

nc localhost 4001

这时,服务端接收到连接请求,连接成功。随后,客户端发起聊天,如上视频所示。

源代码(test.js)

    var net = require('net');

    var server = net.createServer();

    var sockets = [];

    server.on('connection', function(socket) {
        console.log('got a new connection');
        socket.write('System say: Welcome!\n');

        // 存储已建立的连接
        sockets.push(socket);

        socket.on('data', function(data) {
            sockets.forEach(function(otherSocket) {
                if( otherSocket !== socket ) {
                    // 向其他人发送消息
                    var prefix = 'User ' + sockets.indexOf(socket) + ' say: ';
                    otherSocket.write(prefix + 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);

总结

这段短短30行的代码很好地演示了怎样用Node.js建一个TCP服务器,如果你觉得有意思,那就从此开始你的Node.js之旅吧!


blog comments powered by Disqus