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的密码强度验证代码
Mar 01 Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 Javascript
js实现图片轮换效果代码
Apr 16 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 Javascript
JS实现简单抖动效果
Jun 01 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
vue登录路由验证的实现
Dec 13 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
详解vue中axios的封装
Jul 18 Javascript
详解vue中async-await的使用误区
Dec 05 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python中new方法的详解
2019/01/15 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
python基础 range的用法解析
2019/08/23 Python
在pycharm中显示python画的图方法
2019/08/31 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
python图片合成的示例
2020/11/09 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
益达广告词
2014/03/14 职场文书
服务标语口号
2014/07/01 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server