js和java交互websocket实现实时聊天

目录

1.运用场景(实现效果):

 2.代码及其讲解:

js配置:

(1)时间判断函数:

(2)建立ws连接:

结束!


1.运用场景(实现效果):

        前端运用原生js来与后端提供的ws进行交互,实现在线实时聊天,离线储存数据方便读取聊天记录的效果,效果图如下:

 2.代码及其讲解:

js配置:

(1)时间判断函数:

function getTime() {
  var result = 0;
  var time = new Date();
  var h = time.getHours();
  h = h < 10 ? '0' + h : h;
  var m = time.getMinutes();
  m = m < 10 ? '0' + m : m;
  var s = time.getSeconds();
  s = s < 10 ? '0' + s : s;
  var year = time.getFullYear();
  var month = time.getMonth() + 1;
  month = month < 10 ? '0' + month : month;
  var dates = time.getDate();
  var result = year + '-' + month + '-' + dates + ' ' + h + ':' + m + ':' + s;
  return result;
}//获取当前时间
function getprTime() {
  let chattime = document.getElementsByClassName('chattime');
  chattime = chattime[chattime.length - 1].innerHTML;
  return chattime
}//获取的最后一个时间框的时间
function getfirstTime() {
  let chattime = document.getElementsByClassName('chattime');
  chattime = chattime[0].innerHTML;
  return chattime
}//获取的最后第一个时间框的时间
function recontrasttime(time, nowtime) {
  let data = new Date(time.replace(/-/g, "/"));
  let t1 = new Date(nowtime.replace(/-/g, "/"));
  let times = t1.getTime() - data.getTime();
  let days = parseInt(times / (24 * 1000 * 3600));
  if (days > 0) {
    return false;
  }
  let leave = times % (24 * 3600 * 1000);
  let h = parseInt(leave / (3600 * 1000));
  if (h > 0) {
    return false;
  }
  let h_leave = leave % (3600 * 1000);
  let min = parseInt(h_leave / (60 * 1000));

  if (min == 1 || min == 0) {
    return true;
  } else {
    return false;
  }
}//比较以前和现在两者的时间,来判断是否添加时间框

(2)建立ws连接:

var websocket = null;
var creatws= function (userid) {
  if ('WebSocket' in window) {
    //用于创建WebSocket对象,webSocketTest对应的是java类的注解值
    websocket = new WebSocket(`ws://152.136.99.236:8080/websocket/${userid}`);
  } else {
    hintFn("wrong","当前浏览器不支持")
  }
  //连接发生错误的时候回调方法;
  websocket.onerror = function () {
    hintFn("warning","连接错误")
    // alert("连接错误");
  }
  //连接成功时建立回调方法
  websocket.onopen = function () {
    //WebSocket已连接上,使用send()方法发送数据
    hintFn("success","连接成功")
    // alert("连接成功");
  };
  //  收到消息的回调方法
  websocket.onmessage = function (msg) {
    let data = JSON.parse(msg.data)
    console.log(msg.data);
    console.log(data);
    if (data.users != undefined) {
      for (let i of data.users) {
        if (i.userId == toid) {
          useronline[0].style.display = 'block'
          useronline[1].style.display = 'none'
        }
      }
      return
    } else {
      if (!recontrasttime(getprTime(), getTime())) {
        messagebody.innerHTML += `
        <div class="amessage">
          <div class="chattimebox"><span class="chattime">${getTime()}</span></div>
          <div class="chat otherchat">
              <img src="${userimg}" alt="">
              <div class="chattext">${data.text}</div>
          </div>
        </div>
    `
      } else {
        messagebody.innerHTML += `
        <div class="amessage">
          <div class="chat otherchat">
              <img src="${userimg}" alt="">
              <div class="chattext">${data.text}</div>
          </div>
        </div>
    `
      }//渲染数据
      if(nowpage==1){
        messagebody.scrollTop = messagebody.scrollHeight;
      }
    }
  };
  //连接关闭的回调方法
  websocket.onclose = function () {
    closed();
    isFinite('warning',"连接已关闭")
    // alert("关闭成功");
  };
  function closed() {
    websocket.close();
    sFinite('warning',"连接已关闭")
    // alert("点击关闭");
  }
  sendchat.onclick=function(){
    if(isnull(judgeStrs(chattext.value))){
      hintFn('warning', "请输入你要输入的内容")
      return
    }
    let newob = {
      to: toid,
      from: fromid,
      text: judgeStrs(chattext.value),
    }
    if (!recontrasttime(getprTime(), getTime())) {
      messagebody.innerHTML += `
      <div class="amessage">
      <div class="chattimebox"><span class="chattime">${getTime()}</span></div>
      <div class="chat mychat">
      <img src="${myimg}" alt="">
      <div class="chattext">${chattext.value}</div>
        </div>
        </div>
        `
      } else {
        messagebody.innerHTML += `
        <div class="amessage">
        <div class="chat mychat">
        <img src="${myimg}" alt="">
        <div class="chattext">${chattext.value}</div>
        </div>
        </div>
        `
      }
      websocket.send(JSON.stringify(newob)); //给后台发送数据
    messagebody.scrollTop = messagebody.scrollHeight;
    chattext.value=``
  }

结束!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java WebSocketJava EE 7 引入的一种新的网络协议,它允许客户端和服务器之间进行全双工通信。通过使用 WebSocket,可以在 Web 应用程序中实现实时的、双向的数据传输。 在前后端交互的过程中,可以按照以下步骤进行: 1. 在后端创建一个 WebSocket 服务器。可以使用 Java WebSocket API 提供的 javax.websocket.ServerEndpoint 注解来创建一个 WebSocket 端点。在这个类中,可以定义收到消息、连接打开和关闭等事件的处理逻辑。 2. 在前端创建一个 WebSocket 客户端。在前端页面JavaScript 中,可以使用 WebSocket 对象来创建一个 WebSocket 连接。通过指定 WebSocket 服务器的 URL,可以建立与服务器的连接。 3. 后端和前端通过 WebSocket 进行通信。一旦连接建立,后端和前端就可以通过发送和接收消息来交互。在后端的 WebSocket 端点类中,可以使用 @OnMessage 注解来定义接收消息的方法。在前端的 JavaScript 中,可以通过 WebSocket 对象的 send() 方法发送消息,并通过 onmessage 事件监听接收到的消息。 4. 处理连接关闭等事件。在后端的 WebSocket 端点类中,可以使用 @OnClose 注解来定义连接关闭时的处理逻辑。在前端的 JavaScript 中,可以通过 onclose 事件监听连接关闭事件。 需要注意的是,在使用 WebSocket 进行前后端交互时,需要确保后端服务器支持 WebSocket 协议,并且前端浏览器也支持 WebSocket。同时,也需要注意处理可能发生的错误和异常情况,以保证通信的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿泽不会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值