실행하고 나는 다음과 같은 구성을 가지고 있지 :봄 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");
두 변수 (client
및 id
) 접근, 내가 코드와 나는이 부분에서 오류를받지 못했습니다됩니다
는 또한 메시지를 보내 내 클라이언트에 다음과 같은 코드가 있습니다 메시지가 실제로 전송되는 내 콘솔에서 볼 수 있습니다
그러나, 내 컨트롤러에서System.out.println()
문이 실행되지 않습니다
>>> SEND
destination:/app/notify/1
content-length:4
test
, 그래서 내가 뭔가 잘못 내 컨트롤러 매핑에 있다고 가정하거나 내가 더 해요 (왜 여기에 응용 프로그램 접두사를 지정해야하는지 이해할 수는 없지만 해당 끝점에 연결할 때는 이해할 수 없습니다.)
그룹 채팅을 구현하고 유사한 접근 방법을 사용하고 있습니다. 즉, 서버 및 클라이언트 측에서 고유 한 ** groupId **를 가진 주제에 메시지를 게시하고 그룹 ID를 사용하여 해당 주제에 가입하십시오. 이 방법은 ** Simple Broker **를 사용할 때 잘 작동하지만 ** External Broker (RabbitMQ) **를 사용하면 실패합니다. 이 경우 "잘못된 대상"이라고 표시됩니다. 이거 좀 생각해? –