stomp 클라이언트 및 웹 소켓을 사용하여 스프링 부트에서 클라이언트로 데이터를 전송합니다. 첫 번째 사용자에게 데이터를 보낼 수 있지만 사용자가 증가하자마자 일부 사용자 만 데이터를 가져옵니다. 이것은 모든 사용자가 동일한 행동을해야하기 때문에 이상하게 보입니다. 내가 대기열 ('/ 사용자/대기열')에 연결하고 그것을 듣고있는 한 명 이상의 클라이언트가 있기 때문에 이것에 대한 이유가 광범위하게 연구 된 후에 알게되었습니다. 이 문제를 피하는 방법 또는이 문제를 해결하는 것은 불가능합니다. 나는 그 특정 세션 ID에 데이터를 전송 할 수있는 유일한 방법이기 때문에 대기열을 사용해야은 -Stomp 클라이언트가 연결이 설정된 경우에도 항상 데이터를 가져 오지 못함
var socket = new SockJS('/gs-guide-websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({ }, function(frame) {
console.log('Connected this ' + frame);
stompClient.subscribe("/user/queue/cache", function(data) {
// code to display this data..........
});
코드 -
@Controller
public class ScheduledUpdatesOnTopic {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
@Autowired
private SimpMessagingTemplate template;
DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
String json[][] = {{"Lokesh Gupta","34","India",df.format(date)},{"Meenal","23","Pakistan",df.format(date)},{"Gongo","12","Indonesia",df.format(date)},{"Abraham","17","US",df.format(date)},{"Saddam","56","Iraq",df.format(date)},{"Yimkov","67","Japan",df.format(date)},{"Salma","22","Pakistan",df.format(date)},{"Georgia","28","Russia",df.format(date)},{"Jaquline","31","Sri Lanka",df.format(date)},{"Chenchui","78","China",df.format(date)}};
String t[] = {"Lokesh Gupta","34","India","11/8/2017"};
String temp[][];
int p=0;
int count=0;
private MessageHeaderInitializer headerInitializer;
@MessageMapping("/hello")
public void start(SimpMessageHeaderAccessor accessor) throws Exception
{
String applicantId=accessor.getSessionId();
System.out.println("session id " + applicantId);
this.messagingTemplate.convertAndSendToUser(applicantId,"/queue/cache",json,createHeaders(applicantId));
}
private MessageHeaders createHeaders(String sessionId) {
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
if (getHeaderInitializer() != null) {
getHeaderInitializer().initHeaders(headerAccessor);
}
headerAccessor.setSessionId(sessionId);
headerAccessor.setLeaveMutable(true);
return headerAccessor.getMessageHeaders();
}
public MessageHeaderInitializer getHeaderInitializer() {
return this.headerInitializer;
}
public void setHeaderInitializer(MessageHeaderInitializer headerInitializer) {
this.headerInitializer = headerInitializer;
}
그리고 클라이언트 측 HTML 내 컨트롤러. 어떤 도움을 주시면 감사하겠습니다 !!