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数组操作总结和属性、方法介绍
Apr 05 Javascript
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
浅谈JavaScript的事件
Feb 27 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
Aug 25 Javascript
Bootstrap每天必学之响应式导航、轮播图
Apr 25 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
Dec 29 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 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
MVC模式的PHP实现
2006/10/09 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
JS路由跳转的简单实现代码
2017/09/21 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
9种python web 程序的部署方式小结
2014/06/30 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
Python模拟登陆实现代码
2017/06/14 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
Python使用Matlab命令过程解析
2020/06/04 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
营销与策划个人求职信
2013/09/22 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
运动会广播稿200米
2014/01/27 职场文书
自动一体化专业求职信
2014/03/15 职场文书
给公司的建议书范文
2014/05/13 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
党校毕业个人总结
2015/02/28 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书