node.js中的Socket.IO使用实例(2)


//一个客户端连接的字典,当一个客户端连接到服务器时,
//会产生一个唯一的socketId,该字典保存socketId到用户信息(昵称等)的映射
var connectionList = {};

exports.startChat = function (io) {
    io.sockets.on('connection', function (socket) {
        //客户端连接时,保存socketId和用户名
        var socketId = socket.id;
        connectionList[socketId] = {
            socket: socket
        };

//用户进入聊天室事件,向其他在线用户广播其用户名
        socket.on('join', function (data) {
            socket.broadcast.emit('broadcast_join', data);
            connectionList[socketId].username = data.username;
        });

//用户离开聊天室事件,向其他在线用户广播其离开
        socket.on('disconnect', function () {
            if (connectionList[socketId].username) {
                socket.broadcast.emit('broadcast_quit', {
                    username: connectionList[socketId].username
                });
            }
            delete connectionList[socketId];
        });

//用户发言事件,向其他在线用户广播其发言内容
        socket.on('say', function (data) {
            socket.broadcast.emit('broadcast_say',{
                username: connectionList[socketId].username,
                text: data.text
            });
        });
    })
};

Client(socketChatClient.js)

复制代码 代码如下:


var socket = io.connect('http://localhost');
//连接服务器完毕后,马上提交一个“加入”事件,把自己的用户名告诉别人
socket.emit('join', {
    username: 'Username hehe'
});

//收到加入聊天室广播后,显示消息
socket.on('broadcast_join', function (data) {
    console.log(data.username + '加入了聊天室');
});

//收到离开聊天室广播后,显示消息
socket.on('broadcast_quit', function(data) {
    console.log(data.username + '离开了聊天室');
});

//收到别人发送的消息后,显示消息
socket.on('broadcast_say', function(data) {
    console.log(data.username + '说: ' + data.text);
});

//这里我们假设有一个文本框textarea和一个发送按钮.btn-send
//使用jQuery绑定事件
$('.btn-send').click(function(e) {
    //获取文本框的文本
    var text = $('textarea').val();
    //提交一个say事件,服务器收到就会广播
    socket.emit('say', {
        username: 'Username hehe'
        text: text
    });
});

这就是一个简单的聊天室DEMO,你可以根据你的需要随意扩展。Socket.IO基本上就是各种事件的提交和接收处理,思想非常简单。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgszpf.html