一个最简单基于spring的websocket服务端+客户端实现案例

1、服务端

代码分为两部分:

一个是服务器终端类:用java注解来监听连接@ServerEndpoint、连接成功@OnOpen、连接失败@OnClose、收到消息等状态@OnMessage

java 复制代码
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@Component
@ServerEndpoint("/websocket/fqa")
public class QwenWebSocket {

    @OnOpen
    public void onOpen(Session session){
        System.out.println("WebSocket opened: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session){
        System.out.println("Message received: " + message);
        try{
            session.getBasicRemote().sendText("Echo: " + message);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    @OnClose
    public void onClose(Session session){
        System.out.println("WebSocket closed: " + session.getId());
    }

    @OnError
    public void onError(Throwable t){
        t.printStackTrace();
    }
}

一个是websocket的配置类,用于把spring中的ServerEndpointExporter对象注入进来

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig {
    /**
     * 这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket,如果你使用外置的tomcat就不需要该配置文件
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

2、客户端

普通的java工程即可,不需要是spring。

java 复制代码
import javax.websocket.*;
import java.net.URI;


@ClientEndpoint
public class MyWebSocketClient {

    @OnOpen
    public void onOpen(Session session){
        System.out.println("Connected to server");
    }

    @OnMessage
    public void onMessage(String message){
        System.out.println("Received message: " + message);
    }

    @OnClose
    public void onClose(CloseReason reason){
        System.out.println("Closing: " + reason.getReasonPhrase());
    }

    public static void main(String[] args) {
        try{
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            URI uri = URI.create("ws://localhost:8080/websocket/fqa");
            Session session = container.connectToServer(MyWebSocketClient.class, uri);
            session.getBasicRemote().sendText("I'm client!");
            Thread.sleep(10000);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

3、效果

客户端显示:

Connected to server

Received message: Echo: I'm client!

服务端显示:

WebSocket opened: 4

Message received: I'm client!

WebSocket closed: 4

相关推荐
小比卡丘1 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
xmh-sxh-13141 小时前
java 数据存储方式
java
liu_chunhai1 小时前
设计模式(3)builder
java·开发语言·设计模式
ya888g2 小时前
GESP C++四级样题卷
java·c++·算法
【D'accumulation】2 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
小叶学C++2 小时前
【C++】类与对象(下)
java·开发语言·c++
2401_854391082 小时前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端
Cikiss2 小时前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
wxin_VXbishe2 小时前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php
Cikiss2 小时前
微服务实战——平台属性
java·数据库·后端·微服务