SpringBoot集成websocket(1)|(websocket客户端实现)

SpringBoot集成websocket(1)|(websocket客户端实现)


章节

前言

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

一、websocket客户端依赖引入

pom依赖如下

        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.5.3</version>
        </dependency>

二、websocket代码实现

1.WSClient客户端实现

可以定义了websocket的client类,其他地方如果需要使用ws连接,直接注入即可使用

import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Component;

import java.net.URI;
@Slf4j
@Component
public class WSClient {

    public WebSocketClient webSocketClient(String url) {
        try {
            WebSocketClient webSocketClient = new WebSocketClient(new URI(url),new Draft_6455()) {
                @Override
                public void onOpen(ServerHandshake handshakedata) {
                    log.info("[websocket] 连接成功");
                }

                @Override
                public void onMessage(String message) {
                    log.info("[websocket] 收到消息={}",message);

                }
                @Override
                public void onClose(int code, String reason, boolean remote) {
                    log.info("[websocket] 退出连接");
                }

                @Override
                public void onError(Exception ex) {
                    log.info("[websocket] 连接错误={}",ex.getMessage());
                }
            };
            webSocketClient.connect();
            return webSocketClient;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.WSClient客户端使用实例

定义了怎么使用WSClient类建立一个ws连接

@Api(tags = {"websocket测试"})
@RestController
@RequestMapping("/ws")
public class SendMessageCtrl {


    @Autowired
    private WSClient wsClient;

    @GetMapping(value = "hello")
    public void hello(String name) throws InterruptedException {
        WebSocketClient client = this.wsClient.webSocketClient("ws://localhost:8905/ws/test");
        if (client != null){
            for (int i = 0; i < 10; i++) {
                Thread.sleep(1000);
                client.send("客户端发送消息"+i);
            }
        }
    }
}

三、实际使用场景

1.多WSClient连接使用

上述是一个简单的demo,能够通过客户端连接websocket接口,但实际场景可能是很多用户访问本地的服务,改服务需要调用远程的ws接口,这个时候怎么区分用户间独立的建立websocket连接呢

思路:定义一个全局变量,用于存放websocket的客户端,客户端触发发送消息事件,在全局变量里面获取对应的client进行消息发送

@Api(tags = {"websocket测试"})
@RestController
@RequestMapping("/ws")
public class SendMessageCtrl {


    @Autowired
    private WSClient wsClient;

    private static ConcurrentHashMap<String, WebSocketClient> wsClientSet = new ConcurrentHashMap<>();


    @GetMapping(value = "hello")
    public void hello(String name) {
        WebSocketClient client;
        if (wsClientSet.containsKey(name)) {
            client = wsClientSet.get(name);
        } else {
            client = this.wsClient.webSocketClient("ws://localhost:8905/ws/" + name);
            wsClientSet.put(name, client);
        }
        if (client != null) {
            client.send("请根据卖火柴的小女孩生成一个类似的故事");
        }
    }
}

总结

以上就是SpringBoot集成websocket客户端的内容,用于后端服务调用websocket请求。具体业务逻辑执行在代码中自己实现,这里只是给了具体的demo和实例,实际中运用场景还需要自己琢磨。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot集成WebSocket客户端,你可以按照以下步骤进行操作: 1. 引入依赖:在你的项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类:创建一个WebSocketConfig类,用于配置WebSocket相关的bean。可以按照以下示例进行配置: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myWebSocketHandler(), "/websocket-url").setAllowedOrigins("*"); } @Bean public WebSocketHandler myWebSocketHandler() { return new MyWebSocketHandler(); } } ``` 在上述示例中,我们定义了一个名为`myWebSocketHandler`的WebSocket处理程序,并将其映射到`/websocket-url`路径。你可以根据自己的需求进行修改。 3. 创建WebSocket处理程序:实现WebSocketHandler接口,创建一个自定义的WebSocket处理程序。例如: ```java public class MyWebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理接收到的消息 String payload = message.getPayload(); // ... } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 连接建立后的处理逻辑 // ... } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { // 连接关闭后的处理逻辑 // ... } } ``` 4. 发起WebSocket连接:在需要使用WebSocket的地方,注入`WebSocketClient`并使用它创建WebSocket连接。例如: ```java @Autowired private WebSocketClient webSocketClient; public void connectToWebSocket() { webSocketClient.doHandshake(new MyWebSocketHandler(), "ws://websocket-server-url"); } ``` 在上述示例中,我们使用`webSocketClient`发起WebSocket连接,并指定了WebSocket服务器的URL。 通过以上步骤,你就可以在Spring Boot集成WebSocket客户端了。你可以根据自己的需求,进一步扩展和定制WebSocket处理程序和配置类。希望对你有所帮助!如果你有更多问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值