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 相关文章推荐
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
node.js中的fs.rmdirSync方法使用说明
Dec 16 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
Aug 28 Javascript
JavaScript 拖拽实例代码
Sep 21 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
Mar 13 Javascript
jquery加载单文件vue组件的方法
Jun 20 jQuery
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 Javascript
node.js如何自定义实现一个EventEmitter
Jul 16 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
mac下安装nginx和php
2013/11/04 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
js精度溢出解决方案
2012/12/02 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
超简单使用Python换脸实例
2019/03/27 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python实现IOU计算案例
2020/04/12 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
教师档案管理制度
2014/01/23 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
师范毕业生求职信
2014/07/11 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android