对webSochet的理解

Mr.Jia 2023-3-22 238 3/22

WebSocket是一种在单个TCP连接上进行全双工通信的协议,进行实时性通讯


<!-- websocket dependency -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

 

WebSocket通信过程中,客户端和服务端都可以主动向对方发送数据,而不像HTTP协议那样只能由客户端向服务端发送请求,服务端才能响应请求并返回数据。

在开发中遇到的问题:

问题1:用@Resource Service service;自动注入是会报空

问题2:向前端返回对象是报错No encoder specified for object

解决:

解决1:使用Spring.getBean("这里面写serviceImpl")就可以获得service

解决2:创建webSocket编码器,然后在webSocketServer中设置@ServerEndpoint(value = "/webSocket",encoders = ServerEncoder.class)

public class ServerEncoder implements Encoder.Text<Object> {

    @Override
    public String encode(Object object) throws EncodeException {

        return JSONObject.toJSONString(object);
    }

    @Override
    public void init(EndpointConfig endpointConfig) {

    }

    @Override
    public void destroy() {

    }
}

流程

前端:new一个webSocket

websocket = new WebSocket("//localhost:8080/webSocket/");

用websocket 调用OnoPen、OnClose、OnMessage和后端交互

后端开发流程:

首先建立一个WebScoket配置处理器

@Configuration
public class WebSocketConfig {
    /**
     * ServerEndpointExporter 作用是:会自动注册使用@ServerEndpoint注解声明的webSocket endpoint
     *
     */
   @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

再建立一个webSocketServer

@ServerEndpoint("/webSocket")
@Component
public class WebSocketServer {
    //用来记录当前在线连接数
    private static AtomicInteger onlineNum = new AtomicInteger();

    //用来存放每个客户端连接的用户
    private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();

    //建立连接成功调用
    @OnOpen
    public void onOpen(Session session, @PathParam(value = "username") String userName) {

    }

    //关闭连接时调用
    @OnClose
    public void onClose(@PathParam(value = "username") String userName) {
    }

    //和前端进行交互
    @OnMessage
    public void onMessage(String message) throws IOException {
    }

    //错误时调用
    @OnError
    public void onError(Session session, Throwable throwable) {
    }
    
}
- THE END -

Mr.Jia

4月12日10:50

最后修改:2023年4月12日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论