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 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
JQuery 小练习(实例代码)
Aug 07 Javascript
js Event对象的5种坐标
Sep 12 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
Apr 24 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
Jan 28 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
详解Angular结合zTree异步加载节点数据
Jan 20 Javascript
vue组件(全局,局部,动态加载组件)
Sep 02 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
Jul 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
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
php5与php7的区别点总结
2019/10/11 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
python+requests接口自动化框架的实现
2020/08/31 Python
python 实现图片裁剪小工具
2021/02/02 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
什么是命名空间(NameSpace)
2015/11/24 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
2014年网管工作总结
2014/12/11 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技