java web vue_Vue+Java 通过websocket实现服务器与客户端双向通信-Go语言中文社区

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安装目录里的两个依赖包

816478b3da0a038117329cf7ac313f6a.png

de35e2ccd6d624c4abf21c42432f2053.png

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 clients = new ConcurrentHashMap();

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 getClients() {

return clients;

}

}

在项目别的类可通过new WebSocket()向客户端发送数据

WebSocket ws = new WebSocket();

ws.sendMessageAll(JSON.toJSONString(rs));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值