Skip to content
BOFA1ex edited this page Mar 2, 2021 · 4 revisions

spring-boot-starter-websocket-plus基于spring-boot-starter-websocket依赖开发.

官方示例:

import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.TextMessage;

public class MyHandler extends TextWebSocketHandler {

    @Autowired
    private XxxxService xxxService;

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 解析message.getPayload()
        JSONObject payload = JSON.parseObject(message.getPayload());
        // 校验上行数据的消息序号规范, 并下发规范异常下行规范数据.
        assert payload.containKey("消息序号的规范字段名");
        // 校验上行数据的函数枚举规范, 并下发规范异常下行规范数据.
        assert payload.containKey("函数枚举的规范字段名");
        // 检查上行数据的业务参数规范, 并下发规范异常下行规范数据.
        assert payload.containKey("业务参数的规范字段名");
        Long sequence = payload.get(...);
        Integer functionCode = payload.get(...);
        JSONObject params = payload.get(...);
        // 函数枚举为1001的策略逻辑.
        if("1001".equals(functionCode)){
             Object arg0 = params.get(...);
             if(Objects.isNull(arg0)){
                 throw new xxxException("arg0参数不可为空");
             }
             String arg1 = params.getString(...);
             if(StringUtils.isblank(arg1)){
                 throw new xxxException("arg1参数不可为空");
             }
             Object resp = xxxService.service(arg0, arg1, ...);
             // 下发下行数据
             WebsocketMessageEmitter.emit(resp, session);
        }
        ...
    }

}
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
        // 注册路由
        registry.addHandler(myHandler(), "/myHandler");
    }

    @Bean
    public WebSocketHandler myHandler() {
        return new MyHandler();
    }

}

websocket-plus示例

@Slf4j
@WebsocketMapping("/api/xxxx")
public class WsxxxController {

    @WebsocketMethodMapping("#inbound.topic == 'xxx'")
    public WsOutboundBean<?> xxx(WebSocketSession session, @NotNull("arg0参数不可为空") Object arg0, @Notblank("arg1参数不可为空") String arg1) {
        log.info("xxx arg0#{} arg1#{}", arg0, arg1);
        session.getAttributes().put("xxx", req.getXxx());
        return WsOutboundBean.ok().body(ImmutableMap.of(
                "hello", "world"
        ));
    }
}

Clone this wiki locally