2014-03-06 2 views
4

실행하고 나는 다음과 같은 구성을 가지고 있지 :봄 4 WebSocket을 동적 MessageMapping은 내가 톰캣 8 봄 4 WebSocket을 사용하고

<websocket:message-broker application-destination-prefix="/app"> 
    <websocket:stomp-endpoint path="/notify"> 
     <websocket:sockjs /> 
    </websocket:stomp-endpoint> 
    <websocket:simple-broker prefix="/topic" /> 
</websocket:message-broker> 

내 봄 컨트롤러는 다음과 같은 방법이 있습니다 : 그래서

@MessageMapping("/notify/{client}") 
public void pushMessage(@DestinationVariable long client, String message) { 
    System.out.println("Send " + message + " to " + client); 
    template.convertAndSend("/topic/push/" + client, message); 
} 

을 여기서 내가하려고하는 것은 클라이언트 1이 클라이언트 2에게 메시지를 보내려고한다면 그는 /app/notify/2을 사용한다는 것입니다. 그러면 Spring 컨트롤러는 메시지를 주제 /topic/push/2으로 푸시합니다.

나는 나의 클라이언트에 다음 코드를 작성 : 연결이 완벽하게 작동

var id = 1; 
var sock = new SockJS('/project/notify'); 
var client = Stomp.over(sock); 
client.connect({}, function() { 
    client.subscribe('/topic/push/' + id, function(message) { 
     console.log(message); 
    }); 
}); 

, /project 내 응용 프로그램의 바로 컨텍스트 루트입니다.

client.send('/app/notify/' + id, {}, "test"); 

두 변수 (clientid) 접근, 내가 코드와 나는이 부분에서 오류를받지 못했습니다됩니다

는 또한 메시지를 보내 내 클라이언트에 다음과 같은 코드가 있습니다 메시지가 실제로 전송되는 내 콘솔에서 볼 수 있습니다

그러나, 내 컨트롤러에서 System.out.println() 문이 실행되지 않습니다
>>> SEND 
destination:/app/notify/1 
content-length:4 

test 

, 그래서 내가 뭔가 잘못 내 컨트롤러 매핑에 있다고 가정하거나 내가 더 해요 (왜 여기에 응용 프로그램 접두사를 지정해야하는지 이해할 수는 없지만 해당 끝점에 연결할 때는 이해할 수 없습니다.)

+0

그룹 채팅을 구현하고 유사한 접근 방법을 사용하고 있습니다. 즉, 서버 및 클라이언트 측에서 고유 한 ** groupId **를 가진 주제에 메시지를 게시하고 그룹 ID를 사용하여 해당 주제에 가입하십시오. 이 방법은 ** Simple Broker **를 사용할 때 잘 작동하지만 ** External Broker (RabbitMQ) **를 사용하면 실패합니다. 이 경우 "잘못된 대상"이라고 표시됩니다. 이거 좀 생각해? –

답변

3

간단한 String 메시지를 페이로드로 사용하는 경우 매핑 할 수없는 것 같습니다. 객체에 message을 래핑하면 올바르게 작동합니다.

편집 : 주석에 언급 된대로 Spring에는 TextMessage 클래스라는 메시지 래퍼가 이미 제공됩니다.

+1

STOMP를 사용 중이므로 TextMessage 유형 객체를 사용하여 문자열을 보낼 수 있습니다. – AliR

+0

아마 더 낫습니다. 고마워요! – g00glen00b

+0

org.springframework.messaging.Message를 받아들이는 SimpMessagingTemplate을 사용하고 있지만 TextMessage는 org.springframework.web.socket에서 상속받습니다 ... JSON 객체에서 변환되지 않은 간단한 STOMP 문자열을 보내는 방법은 무엇입니까? –

관련 문제