-
Notifications
You must be signed in to change notification settings - Fork 4
Home
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"
));
}
}