Vue+Java 通过websocket实现服务器与客户端双向通信操作


Posted in Javascript onSeptember 22, 2020

1. vue代码

methods: {
 //在方法里调用 this.websocketsend()发送数据给服务器
  onConfirm () {
   //需要传输的数据
    let data = {
     code: 1,
     item: ‘传输的数据'
    }
    this.websocketsend(JSON.stringify(data))
  },
  /*
  */
  initWebSocket () { // 初始化weosocket
   let userinfo = getUserInfo()
   let username = userinfo.waiter_userid
   this.websock = new WebSocket('ws://' + baseURL + '/websocket/' + username)

   this.websock.onmessage = this.websocketonmessage
   this.websock.onerror = this.websocketonerror
   this.websock.onopen = this.websocketonopen
   this.websock.onclose = this.websocketclose
  },
  websocketonopen () { // 连接建立之后执行send方法发送数据
   let data = {
    code: 0,
    msg: '这是client:初次连接'
   }
   this.websocketsend(JSON.stringify(data))
  },
  websocketonerror () { 
   console.log( 'WebSocket连接失败')
  },
  websocketonmessage (e) { // 数据接收
   console.log('数据接收' + e.data)
  },
  websocketsend (Data) { // 数据发送
   this.websock.send(Data)
  },
  websocketclose (e) { // 关闭
   console.log('已关闭连接', e)
  }
 },
 created () {
  console.log('created')
  this.initWebSocket()
 },
 data () {
  return {
   websocket: null
  }
 },
 destroyed () {
  this.websock.close() // 离开路由之后断开websocket连接
 }

2. java代码

项目引入tomcat安装目录里的两个依赖包

Vue+Java 通过websocket实现服务器与客户端双向通信操作

package diancan.servlet;

import java.io.IOException;
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;

@ServerEndpoint("/websocket/{username}")
public class WebSocket {

  private static int onlineCount = 0;
  private static Map<String, WebSocket> clients = new ConcurrentHashMap<String, WebSocket>();
  private Session session;
  private String username;

  @OnOpen
  public void onOpen(@PathParam("username") String username, Session session) throws IOException {
  this.username = username;
  this.session = session;

  addOnlineCount();
  clients.put(username, this);
  System.out.println("已连接" + username);
  }

  @OnClose
  public void onClose() throws IOException {
  clients.remove(username);
  subOnlineCount();
  }

  @OnMessage
  public void onMessage(String message) throws IOException {
  DataWrapper res = new DataWrapper();
  System.out.println("message:" + message);
  JSONObject req = JSONObject.parseObject(message);
// System.out.println("item:" + req.getJSONObject("item"));
// System.out.println("item:" + req.getInteger("code"));

  // 发送数据给服务端
  sendMessageAll(JSON.toJSONString(res));
  }

  @OnError
  public void onError(Session session, Throwable error) {
  error.printStackTrace();
  }

  public void sendMessageTo(String message, String To) throws IOException {
  // session.getBasicRemote().sendText(message);
  // session.getAsyncRemote().sendText(message);
  for (WebSocket item : clients.values()) {
   if (item.username.equals(To))
   item.session.getAsyncRemote().sendText(message);
  }
  }

  public void sendMessageAll(String message) throws IOException {
  for (WebSocket item : clients.values()) {
   item.session.getAsyncRemote().sendText(message);
  }
  }

  public static synchronized int getOnlineCount() {
  return onlineCount;
  }

  public static synchronized void addOnlineCount() {
  WebSocket.onlineCount++;
  }

  public static synchronized void subOnlineCount() {
  WebSocket.onlineCount--;
  }

  public static synchronized Map<String, WebSocket> getClients() {
  return clients;
  }
}

在项目别的类可通过new WebSocket()向客户端发送数据

WebSocket ws = new WebSocket();

ws.sendMessageAll(JSON.toJSONString(rs));

以上这篇Vue+Java 通过websocket实现服务器与客户端双向通信操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
Javascript 构造函数详解
Oct 22 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 Javascript
非常实用的vue导航钩子
Mar 20 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
Nov 05 Javascript
Vue实现开关按钮拖拽效果
Sep 22 #Javascript
JS如何生成动态列表
Sep 22 #Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
Sep 22 #Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 #Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 #Javascript
Js跳出两级循环方法代码实例
Sep 22 #Javascript
vue 二维码长按保存和复制内容操作
Sep 22 #Javascript
You might like
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
jQuery 树形结构的选择器
2010/02/15 Javascript
js星星评分效果
2014/07/24 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
使用Python对Excel进行读写操作
2017/03/30 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python代码中怎么换行
2020/06/17 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
五四青年节的活动方案
2014/08/20 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
中学教师个人总结
2015/02/10 职场文书
四大名著读书笔记
2015/06/25 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
python自动计算图像数据集的RGB均值
2021/06/18 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
Go语言编译原理之变量捕获
2022/08/05 Golang