복붙노트

[SPRING] STOMP없이 원시 스프링 4 웹 소켓을 사용하여 메시지를 브로드 캐스트하는 방법은 무엇입니까?

SPRING

STOMP없이 원시 스프링 4 웹 소켓을 사용하여 메시지를 브로드 캐스트하는 방법은 무엇입니까?

이 위대한 답변 https://stackoverflow.com/a/27161986/4358405에는 STOMP 서브 프로토콜없이 (그리고 SockJS없이) 원시 스프링 4 웹 소켓을 사용하는 방법의 예가 있습니다.

이제 내 질문은 : 모든 클라이언트에게 어떻게 브로드 캐스트합니까? 순수한 JSR 356 웹 소켓 API와 비슷한 방식으로 사용할 수있는 API를 기대합니다. session.getBasicRemote (). sendText (messJson);

모든 WebSocketSession 객체를 독립적으로 유지 한 다음 각 객체에서 sendMessage ()를 호출해야합니까?

해결법

  1. ==============================

    1.해결책을 찾았습니다. WebSocket 핸들러에서 WebSocketSession 목록을 관리하고 afterConnectionEstablished 함수에 새 세션을 추가합니다.

    해결책을 찾았습니다. WebSocket 핸들러에서 WebSocketSession 목록을 관리하고 afterConnectionEstablished 함수에 새 세션을 추가합니다.

    private List<WebSocketSession> sessions = new ArrayList<>();
    
    synchronized void addSession(WebSocketSession sess) {
        this.sessions.add(sess);
    }
    
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        addSession(session);
        System.out.println("New Session: " + session.getId());
    }
    

    우리가 방송 할 필요가있을 때, 목록 세션의 모든 세션을 열거하고 메시지를 보냅니다.

    for (WebSocketSession sess : sessions) {
            TextMessage msg = new TextMessage("Hello from " + session.getId() + "!");
            sess.sendMessage(msg);
    }
    

    희망이 도움이!

  2. ==============================

    2.내가 아는 한 여기 문서에서 수집 할 수 있습니다 당신은 WebSocketHandler를 사용하여 방송 할 수 없습니다.

    내가 아는 한 여기 문서에서 수집 할 수 있습니다 당신은 WebSocketHandler를 사용하여 방송 할 수 없습니다.

    대신 여기에 설명 된대로 WebSocketMessageBrokerConfigurer가 구성한 WebSocket을 통해 Stomp를 사용해야합니다.

    코드의 어느 곳에서나 SimpMessagingTemplate을 사용하여 여기에 설명 된대로 가입 된 클라이언트에 메시지 보내기

  3. from https://stackoverflow.com/questions/33910639/how-to-broadcast-a-message-using-raw-spring-4-websockets-without-stomp by cc-by-sa and MIT license