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的document对象和window对象详解
Dec 30 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
Oct 10 Javascript
js加入收藏夹代码(兼容ie/ff/op)
May 16 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
JQuery实现防止退格键返回的方法
Feb 12 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
layui分页效果实现代码
May 19 Javascript
浅谈原生JS中的延迟脚本和异步脚本
Jul 12 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
JS前后端实现身份证号验证代码解析
Jul 23 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
Terran兵种介绍
2020/03/14 星际争霸
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
php集成开发环境详解
2019/09/24 PHP
JavaScript静态的动态
2006/09/18 Javascript
编辑浪子版表单验证类
2007/05/12 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
分页栏的web标准实现
2011/11/01 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
js面向对象编程总结
2017/02/16 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
Javascript执行流程细节原理解析
2020/05/14 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
python 生成器协程运算实例
2017/09/04 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
pymysql的简单封装代码实例
2020/01/08 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
大型演出策划方案
2014/05/28 职场文书
任命书范本大全
2014/06/06 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
求职自我推荐信
2015/03/24 职场文书
2016春季运动会开幕词
2016/03/04 职场文书