node.js搭建基础聊天室part3

接着上一部分http://www.jianshu.com/p/773e9f97111c

这次是聊天室的核心,聊天功能

主要的流程如下:

1.首先聊天由客户端发起,向服务端发送say事件,同时客户端自身渲染视图。

2.当服务端接受到say事件时,会通过传来的data对象进行判断,是群聊信息,还是私聊信息,然后再向客户端发送会话信息

3.客户端接收到会话信息,渲染视图

以上流程如图所示:

node.js搭建基础聊天室part3_第1张图片
聊天

代码如下:

首先是客户端代码

   //发送聊天信息
    $('#say').click(function() {
        //拿到要发送的信息
        var $msg = $("#input_content").html();
        //判断消息是否为空
        if ($msg ==="") {
            return ;
        };
        //这里先把信息添加到自己的客户端页面显示出来
        if (to ==="all") {
            $("#contents").append('
你(' + now() + ')对 所有人 说:
' + $msg + '

'); } else { $("#contents").append('
你(' + now() + ')对 ' + to + ' 说:
' + $msg + '

'); } //发送聊天信息到客户端 socket.emit('say',{from:from,to:to,msg:$msg}); //清空输入框,获得焦点,以便继续输入 $("#input_content").html('').focus(); });

接下来对应服务器端:

//客户端传来了聊天信息
    socket.on('say',function (data) {
        if (data.to === 'all') {
            //判断是否该客户端是否是跟所有人进行聊天,群聊
            socket.broadcast.emit('say',data);
        } else {
            //向特定用户发送会话信息
            //clients是一个里面存储了所有连接对象的数组,私聊
            var clients = io.sockets.clients();
            clients.forEach(function (client) {
                if (client.name ===data.to) {
                    client.emit('say',data);
                }
            })
        }
    })

最后,客户端接收消息

//接受服务器传过来的聊天信息
     socket.on('say',function (data) {
         //群聊
        if (data.to == 'all') {
            $("#contents").append('
' + data.from + '(' + now() + ')对 所有人 说:
' + data.msg + '

'); } //和你私聊 if (data.to == from) { $("#contents").append('
' + data.from + '(' + now() + ')对 你 说:
' + data.msg + '

'); } })

要注意一点的是,客户端和服务器端对say事件的处理都包含在online事件中。

你可能感兴趣的:(node.js搭建基础聊天室part3)