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 相关文章推荐
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
jquery拖动插件(jquery.drag)使用介绍
Jun 18 Javascript
让复选框只能选择一项的方法
Oct 08 Javascript
jQuery元素选择器用法实例
Dec 23 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
Oct 23 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 Javascript
Javascript 链式作用域详细介绍
Feb 23 Javascript
jQuery Pagination分页插件使用方法详解
Feb 28 Javascript
微信小程序picker组件下拉框选择input输入框的实例
Sep 20 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 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
linux下php上传文件注意事项
2016/06/11 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
剖析Python的Twisted框架的核心特性
2016/05/25 Python
利用Python开发微信支付的注意事项
2016/08/19 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
django 读取图片到页面实例
2020/03/27 Python
python进行参数传递的方法
2020/05/12 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
UNIX命令速查表
2012/03/10 面试题
建筑工程自我鉴定
2013/10/18 职场文书
初三家长会邀请函
2014/01/18 职场文书
《学会合作》教学反思
2014/04/12 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
利用Python判断你的密码难度等级
2021/06/02 Python
Python爬取某拍短视频
2021/06/11 Python