当前位置:编程学习 > > 正文

vue实现聊天(Vue+ssh框架实现在线聊天)

时间:2021-10-19 06:08:51类别:编程学习

vue实现聊天

Vue+ssh框架实现在线聊天

本文实例为大家分享了Vue+ssh框架实现在线聊天的具体代码,供大家参考,具体内容如下

效果图

vue实现聊天(Vue+ssh框架实现在线聊天)

vue实现聊天(Vue+ssh框架实现在线聊天)

核心部分

websocket编程

向后台发送消息

  • <template>
    <el-container>
      <el-header >
      </el-header>
      <el-main>
        <li class="cht">
       <li v-for="(d,index) in mycontent" :key="index">
          <my :message="d.mess" :time="d.time" :bl="d.bl"></my>
          </li>
          </li>
    <li class="smess">
      <el-row>
        <el-col :span="18">
    <el-input type="textarea"  placeholder="请输入内容"   v-model="textarea" class="text"></el-input>
        </el-col>
         <el-col :span="6">
           <br>
          <el-button type="primary" round  @click="mess()">发送消息</el-button>
        </el-col>
      </el-row>
      </li>
      </el-main>
    </el-container>
    </template>
    <style>
    .smess{
      left: 20%;
      width:70%;
      position: absolute;
      top:70%
    }
    .text{
    border: 1px solid #409eff;
    }
    .cht{
    width: 55%;
    height: 30%;
    background-color: burlywood;
    margin-left: 18%;
    }
    </style>
    <script>
    import router from "../../router/router.js";
    import my from "./my";
    import axios from "axios";
    import Qs from "qs";
    var mylogo=localStorage.getItem("logo");//当前的的用户头像
    var identity=localStorage.getItem("identity");//当前身份
      var name=localStorage.getItem("username");//当前用户名
      //从上一个页面获取一个老师名称
      var teacher='';
    export default {
       components: {
          my
      },
      methods: {
        //在方法里调用this.websocketsend()发送数据给服务器
        onConfirm() {
          //需要传输的数据
          var data="你好";
          this.websocketsend(JSON.stri.jpg" alt="vue实现聊天(Vue+ssh框架实现在线聊天)" border="0" />
    
  • 组件my.vue

  • <template>
    <li v-if="bl" class="rborders">
      <el-row class="ms">
        <el-col :span="22">
          <el-row><span>{{message}}</span></el-row>
          <br>
           <el-row><span class="time">{{time}}</span></el-row>
      </el-col>
        <el-col :span="2" >
          <img src="mylogo" class="logo"/>
      </el-col>
        </el-row>
      </li>
      <li v-else class="lborders">
     <el-row>
      <el-col :span="2" >
          <img src="http://localhost:8080/PsychoSys/title/user.jpg" alt="vue实现聊天(Vue+ssh框架实现在线聊天)" border="0" />
    
  • 后台代码

  • package cn.com.socket;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
     
    import javax.websocket.OnClose;
    import javax.websocket.OnError;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.PathParam;
    import javax.websocket.server.ServerEndpoint;
     
    import org.hibernate.SessionFactory;
     
    import net.sf.json.JSONObject;
    @ServerEndpoint("/javasocket/{uname}")
    public class SocketPart {
     //日期化
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
     //存储会话的集合,value类型是java类class SocketPart
     private static Map<String,SocketPart> map=new ConcurrentHashMap<String,SocketPart>();
        private String username;
        private Session session;
     private SessionFactory sf;
     public SessionFactory getSf() {
      return sf;
     }
     public void setSf(SessionFactory sf) {
      this.sf = sf;
     }
     @OnOpen
     public void open(@PathParam("uname")String username,Session session){
      this.username=username;
      this.session=session;
      map.put(username,this);
     }
     @OnClose
     public void close(){
      map.remove(this.username);
      try {
       this.session.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      System.out.println("关闭");
     }
     @OnError
     public void error(Throwable t) {
      // 添加处理错误的操作
      close();
      System.out.println("发生错误");
      
      t.printStackTrace();
     }
     @OnMessage
     public void mess(String message,Session session){
      JSONObject jsonObject = JSONObject.fromObject(message);
      jsonObject.put("date", DATE_FORMAT.format(new Date()));
      //把当前集合的大小给前台,不然的话,就不知道怎么存储
      jsonObject.put("cusize",map.size());
     //接收到信息
      for (String s : map.keySet()) {
       if(this.username.equals(map.get(s).username)){
        jsonObject.put("isSelf", true);
       }else{
        jsonObject.put("isSelf", false);
       }
       map.get(s).session.getAsyncRemote().sendText(jsonObject.toString());
      }
     }
    }
    
  • 注意:导入两个包

    vue实现聊天(Vue+ssh框架实现在线聊天)

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐