当前位置: 首页 > article >正文

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录

    • 接收消息的原理
    • 接收消息
      • JavaScript代码

接收消息的原理

接收消息,就是接受服务器转发的客户端消息。并不需要单独创建函数,因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候,已经处理的init类型的消息。这次处理text类型的消息。把接收到的消息展示在聊天窗口左侧,追加而已。
在这里插入图片描述

接收消息

JavaScript代码

ws.onmessage=function (e){
        // json数据转换成js对象
        var data = eval("("+e.data+")");
        var type = data.type || '';
        console.log(data)
        switch(type){
           // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定
            case 'init':
                // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定
                $.post('/chat.php/Chat/bind', {client_id: data.client_id}, function(data){}, 'json');                              
                break;
            // 当mvc框架调用GatewayClient发消息时直接alert出来
            case 'text':
                var content=data.content;
                var content_type=data.content_type;
                var f_id=data.from_id;
                if (f_id !=to_id){
                    //不接收其他人给当前用户发来的消息在此展示
                    /*
                    如果当前用户为a,和b、c同时聊天,应该是打开两个聊天界面。
                    但是b、c给发送的消息都会发给a,a的两个界面同时接收。
                    就会造成消息乱展示。所以,如果不是当前聊天的对方发来的消息,就不展示。
                    */
                }else{
                    var html=render_accept(content,content_type);
                    $('#chat_content').append(html);
                }
                break;
            // 当mvc框架调用GatewayClient发消息时直接alert出来
            case "logout":
                console.log('掉线了')
                break;
            default :
                alert(e.data);
        }
    }
    //接收到的消息渲染,渲染对方的消息,在左侧。
    function render_accept(content,content_type) {
        var html='<div class="media">' +
            '            <div class="media-left">' +
            '                <img class="media-object avatar" src="'+to_avatar+'" alt="...">' +
            '            </div>' +
            '            <div class="media-body">' +
            '                <h4 class="media-heading">'+to_user_name+'</h4>' ;
        if(content_type==1){
            html+='                <p class="chat_msg_left">'+content+'</p>' ;
        }
        if(content_type==2 ){
            html+='                <p class="chat_msg_left"><img src="'+content+'"/></p>' ;
        }
        if(content_type==3 ){
            html+='                <p class="chat_msg_left"><img src="'+content+'" class="emoj_w"/></p>' ;
        }
        html+=
            '            </div>' +
            '        </div>';
        return html;
    }

到这里,接收消息就做完了。


http://www.kler.cn/a/465302.html

相关文章:

  • 基于SpringBoot的校园二手交易平台的设计与实现(源码+SQL+LW+部署讲解)
  • 【云计算】OpenStack单节点allinone部署
  • js 用2进制来表示权限
  • 关于Lombok中注解失效的问题
  • 【优选算法】三数之和
  • 聚合函数理解
  • 深入了解PINN:物理信息神经网络(Physics-Informed Neural Networks)
  • 电影院售票 - 策略模式(Strategy Pattern)
  • github提交不上去,网络超时问题解决
  • 【AIGC】ChatGPT 记忆功能揭秘:使用与管理的全方位指南
  • 计算帐户每月余额,补齐缺失日期:从 SQL 到 SPL
  • Luma AI 简单几步生成视频
  • SpringMVC(一)配置
  • 【OpenCV】使用Python和OpenCV实现火焰检测
  • Spring Boot 中 TypeExcludeFilter 的作用及使用示例
  • 数据挖掘——聚类
  • vue3基础,小白从入门到精通
  • 三维算法基础知识
  • Unity Shader:从基础使用到动画实现全解析
  • 二层交换机和三层交换机