简单的搭建Websocket(java+vue)

简单记录一下搭建webSocket的过程

搭建webSocket非常简单,只需要以下两步

  1. 后台创建websocket配置类
  2. 后台创建websocket类
  3. 前端页面连接

后台WebSocket配置类如下

配置类,照搬即可

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class MyWebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

WebSocket类

这个类可以根据实际需求来进行封装,简化调用

import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArraySet;

@Component
//前端连接的地址路径
@ServerEndpoint("/websocket/{key}")
public class MyWebSocket {
    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;

    private static CopyOnWriteArraySet<MyWebSocket> webSockets =new CopyOnWriteArraySet<>();
    //用来存放每个客户端对应的WebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
    private static Map<String,Session> sessionPool = new HashMap<String,Session>();

    @OnOpen
    public void onOpen(Session session, @PathParam(value="key")String key) {
        this.session = session;
        webSockets.add(this);
        sessionPool.put(key, session);
        System.out.println("【websocket消息】有新的连接,总数为:"+webSockets.size());
        sendAllMessage("欢迎您,客户端");
    }

    @OnClose
    public void onClose() {
        webSockets.remove(this);
        System.out.println("【websocket消息】连接断开,总数为:"+webSockets.size());
    }

    @OnMessage
    public void onMessage(String message) {
        System.out.println("【websocket消息】收到客户端消息:"+message);
    }

    // 此为广播消息
    public void sendAllMessage(String message) {
        for(MyWebSocket webSocket : webSockets) {
            System.out.println("【websocket消息】广播消息:"+message);
            try {
                webSocket.session.getAsyncRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    // 此为单点消息 (发送文本)
    public void sendTextMessage(String key, String message) {
        Session session = sessionPool.get(key);
        if (session != null) {
            try {
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

最后,前端页面

前端,方法可以自由定义什么时候创建链接,我是直接页面初始化就创建链接

<template>
<a-card>
  <div>
    <h1>测试webSocket</h1>
    <button @click="send">点击请求后台数据</button>
    <button @click="onClose">关闭连接</button>
  </div>
  </a-card>
</template>
<script>
export default {
  created() {
    // 页面创建生命周期函数
    this.initWebSocket();
  },
  methods: {
    onClose(){
      this.websock.close();
    },
    initWebSocket() {
      if ("WebSocket" in window) {
        // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
        //d5533相当于我这台客户端的标识,key,用来单客户端通话
        this.websock = new WebSocket(
          "ws://localhost:8010/websocket/d5533"
        );
        this.websock.onopen = this.websocketonopen;
        this.websock.onerror = this.websocketonerror;
        this.websock.onmessage = this.websocketonmessage;
        this.websock.onclose = this.websocketclose;
      } else {
        alert("not error  不支持websocket");
      }
    },
    //连接回调
    websocketonopen() {
      console.log("WebSocket连接成功");
    },
    //发生错误回调
    websocketonerror(e) {
      console.log("WebSocket连接发生错误");
    },
    //接收到消息的回调函数
    websocketonmessage(e) {
      console.log(e.data); // console.log(e);
    },
    // 连接关闭时的回调函数
    websocketclose(e) {
      console.log("connection closed (" + e + ")");
    },
    send() {
      this.websock.send('后台你好,我是前端');
    }
  }
};
</script>
<style lang="less" scoped>
</style>

到这里,就完成了一个简单的WebSocket就搭建完成了,可以进行前后端互相通话,大家快动手试试吧。

关注公众号,不定期干货噢
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. Java后端搭建WebSocket Java后端可以使用Spring Boot和Spring WebSocket搭建WebSocket。以下是一个简单的例子: 首先,需要添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 然后,在Spring Boot的Application类中添加@EnableWebSocket注解: ```java @SpringBootApplication @EnableWebSocket public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,创建一个WebSocket处理器: ```java @Component public class MyWebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理消息 } } ``` 最后,在配置类中配置WebSocket: ```java @Configuration public class WebSocketConfig implements WebSocketConfigurer { @Autowired private MyWebSocketHandler myWebSocketHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myWebSocketHandler, "/ws").setAllowedOrigins("*"); } } ``` 现在,Java后端的WebSocket已经搭建完成了。 2. Vue前端搭建WebSocketVue前端中,可以使用WebSocket API来搭建WebSocket。以下是一个简单的例子: 首先,创建一个WebSocket实例: ```javascript var socket = new WebSocket("ws://localhost:8080/ws"); ``` 这里的地址是Java后端WebSocket的地址。 然后,监听WebSocket的事件: ```javascript socket.onopen = function() { // 连接成功 }; socket.onmessage = function(event) { // 收到消息 }; socket.onclose = function(event) { // 连接关闭 }; socket.onerror = function(event) { // 连接出错 }; ``` 最后,发送消息: ```javascript socket.send("Hello, WebSocket!"); ``` 现在,Vue前端的WebSocket也已经搭建完成了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值