spring4.0 websocket

1.实例化对象

@Configuration
@EnableWebSocket
// 开启websocket
public class SystemWebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(echoWebSocketHandler(), "/notice.ws").addInterceptors(new WebSocketHandshakeInterceptor()); // 提供符合W3C标准的Websocket数据
        registry.addHandler(echoWebSocketHandler(), "/sockjs/notice.ws")
                .addInterceptors(new WebSocketHandshakeInterceptor()).withSockJS();// 提供符合SockJS的数据
    }

    @Bean
    public WebSocketHandler echoWebSocketHandler() {
        return new SystemWebSocketHandler();
    }

    @Bean
    public WebSocketHandler snakeWebSocketHandler() {
        return new SystemWebSocketHandler();
    }

    // Allow serving HTML files through the default Servlet
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /**
     * {@inheritDoc}
     * <p>
     * This implementation is empty.<pre name="code" class="java">public class SystemWebSocketHandler extends TextWebSocketHandler {
    /**
     * 日志记录器
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(SystemWebSocketHandler.class);

    // 连接创建生效以后执行的方法
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        LOGGER.info("Socket 连上了");
        String gwID = (String) session.getAttributes().get("gwID");
        String amID = (String) session.getAttributes().get("amID");
        if (!StringUtils.isEmpty(gwID) || !StringUtils.isEmpty(amID)) {
            if (null != gwID) {
                if (session.isOpen()) {
                    SocketMessageUtil.addNewConnector(gwID, session);
                }
            }
            if (null != amID) {
                if (session.isOpen()) {
                    SocketMessageUtil.addNewConnector(amID, session);
                }
            }
        }
    }

    // 接收客户端发送过来的消息
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        LOGGER.info("Socket 接收客户端发送过来的消息");
        String msgContent = message.getPayload().toString();
        String gwID = (String) session.getAttributes().get("gwID");
        if (!StringUtils.isEmpty(msgContent) && "1".equals(msgContent)) {
            TextMessage message1 = new TextMessage("1");
            SocketMessageUtil.sendMessageToUser(gwID, message1);
        } else {
            for (int i = 0; i < 10; i++) {
                TextMessage message1 = new TextMessage("2");
                SocketMessageUtil.sendMessageToUser(gwID, message1);
            }
        }
    }

    // 传输错误时触发
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        exception.printStackTrace();
    }

    // 连接关闭时触发
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        LOGGER.info("Socket 连接关闭");
        String gwID = (String) session.getAttributes().get("gwID");
        String amID = (String) session.getAttributes().get("amID");
        if (!StringUtils.isEmpty(gwID) || !StringUtils.isEmpty(amID)) {
            if (null != gwID) {
                SocketMessageUtil.deleteConnector(gwID);
            }
            if (null != amID) {
                SocketMessageUtil.deleteConnector(amID);
            }
        } else {
            SocketMessageUtil.deleteConnector(session);
        }
    }

    /**
     * 是否支持分步消息
     */
    @Override
    public boolean supportsPartialMessages() {
        return false;
    }

}

*/ @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { // -1 为用不失效 configurer.setDefaultTimeout(-1); }}

 

/notice.ws是websocket的访问地址

2.定义通信处理类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值