实时通信websocket

对于需要实时的消息通信需要借助socket来进行消息传输

springboot集成websocket

@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

@Slf4j
@ServerEndpoint("/websocket/getdata")
@Component
public class WebSocketServer {
    //记录在线连接数
    private static int onlineCount = 0;

    //concurrent包的线程安全set,用来存放每个客户端对应的TelStatusChangeWebSocket对象
    public static Map<String, Session> webSocketMap = new ConcurrentHashMap<>();

    /**
     * 创建连接
     * @param session
     */
    @OnOpen
    public void onOpen(Session session){
        //加入set中
        webSocketMap.put(session.getId(), session);
        //在线数加一
        addOnlineCount();
        log.info("开启websocket连接");
    }

    /**
     * 关闭websocket连接
     * @param session
     */
    @OnClose
    public void onClose(Session session){
        webSocketMap.remove(session.getId());
        //在线人数减1
        subOnlineCount();
        log.info("关闭websocketMap连接");
    }

    /**
     * 当接收到客户端消息后触发
     * @param message
     * @param session
     */
    @OnMessage
    public void onMessage(String message, Session session){
        log.info("{}传来的消息为{}",session.getId(), message);
    }

    /**
     * 向所有人发送消息
     * @param msg
     */
    public void sendMessageToAll(String msg){
        webSocketMap.forEach((id, session)->{
            try {
                session.getBasicRemote().sendText(msg);
                log.info("消息发送成功{}", msg);
            }catch (Exception e){
                log.info("{},发送消息失败,原因{}",session.getId(),e);
            }
        });
    }

    private void subOnlineCount() {
        WebSocketServer.onlineCount--;
    }

    private void addOnlineCount() {
        WebSocketServer.onlineCount++;
    }

}

使用WebSocket中出现的问题

  1. 问题:javax.servlet.ServletException: javax.websocket.DeploymentException: The path [webSocket] is not valid.

解决@ServerEndpoint("/websocket/getdata")路径开头要有/

  1. WebSocketConfig类中注解错误使用成@Configurable,应该为:@Configuration
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值