SpringBoot中使用Websocket进行消息推送

java

浏览数:348

2019-1-7

AD:资源代下载服务

片段 1片段 2片段 3片段 4片段 5


WebsocketConfig.java

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


WebsocketServer.java

@Log4j
@Component
@ServerEndpoint("/websocket/{id}")
public class WebsocketServer {
    private static Map<String, Session> connections = new HashMap<>();
    private Session session;
    @OnOpen
    public void onOpen(Session session, @PathParam("id") String id) {
        this.session = session;
        connections.put(id, session);
    }
    @OnMessage
    public void onMessage(String text){
        log.info("WebSocket连接数:" + connections.size());
        String[] s = text.split("]#!]");
        Session ses = connections.get(s[0]);
        try {
            ses.getBasicRemote().sendText(s[1]);
        } catch (IOException e) {
            MythException.recode("websocket服务器异常:"+e.getMessage(), e, WebsocketServer.class);
        }
    }
    @OnError
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
        log.error(throwable.getMessage());
    }
    @OnClose
    public void onClosing() throws IOException {
        connections.remove(session);
        session.close();
    }
}


WebsocketClient.java

@Component
@Log4j
@ClientEndpoint
public class WebSocketClient {

    private Session session;

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
    }

    @OnMessage
    public void onMessage(String text) throws IOException {
        session.getBasicRemote().sendText(text);
    }

    @OnError
    public void onError(Throwable throwable) {
        log.error(throwable.getMessage());
    }

    @OnClose
    public void onClosing() throws IOException {
//        log.info("连接关闭");
        session.close();
    }

    public void sendMessage(String toId, String text) throws IOException {
        text = toId + "]#!]" + text;
//        log.info(text);
        onMessage(text);
    }

    public static WebSocketClient connect(String url) throws Exception {
        WebSocketContainer wsc = ContainerProvider.getWebSocketContainer();
        WebSocketClient client = new WebSocketClient();
        wsc.connectToServer(client, new URI(url));
        return client;
    }

}


Use.java

 WebSocketClient client;
    try {
        client = WebSocketClient.connect("ws://wx.jjyouhuigo.com/websocket/system");
        // 发送消息, id 为接受者id, text为发送的信息
        client.sendMessage(id, System.currentTimeMillis()+" 文件导入有错误,请重新配置后导入");
        // 关闭连接
        client.onClosing();
    } catch (Exception e) {
        e.printStackTrace();
    }


View.js

var ws = new WebSocket("ws://127.0.0.1/websocket/" + id);
ws.onopen = function () {
    console.log("open");
};
ws.onmessage = function (evt) {
    console.log(evt.data)
};
ws.onclose = function (evt) {
    console.log("close");
};
ws.onerror = function (evt) {
    console.log("error");
};