LINUX.ORG.RU

Как работает STOMP??

 , ,


0

2

На сервере SpringBoot, вот я делаю:

@RestController
public class ApiController {

    ...

    @MessageMapping("/cmd")
    @SendTo("/resp")
    public CmdRespMessage conCommand(CmdReqMessage cmdReqMessage, SimpMessageHeaderAccessor headerAccessor) {

        что-то делаю...

        return new CmdRespMessage(200, ip, id, state);
    }

В браузере:

const stompClient = new StompJs.Client({
    brokerURL: 'wss://host/wsapi/xxx-websocket'
});

stompClient.onConnect = (frame) => {
    console.log('Connected: ' + frame);

    ...

    stompClient.subscribe('/resp', (msg) => {
        conResponse(JSON.parse(msg.body).code....);
    });

    ....	
};

Потом делаю в каком-то месте паблиш:

	stompClient.publish({
		destination: "/app/cmd",
		body: JSON.stringify({'ip': ip, ....})
	});

И я рассчитываю, что оно прилетит мне в коллбек, и оно прилетает, да, но! Оно разлетается по всем соединениям. То есть бродкастится просто по всем открытым вебсокетам. Я рассчитывал, что это будет работать в рамках коннекта.

Это я что-то не так сделал, или так и задумано? Как эти запросы-ответы по коннекциям разделить?

Перемещено CrX из development

Это я что-то не так сделал, или так и задумано?

Так и задумано. @SendTo броадкастит всем, кто подписался. @SendToUser отправляет инициатору.

hippi90 ★★★★★
()
Ответ на: комментарий от hippi90

Вот спасибо!

Поменял @SendTo на @SendToUser и еще выяснил, что надо в этом случае subscribe на ‘/user/resp’ вместо ‘/resp’, но только оно не заработало! Теперь не приходят сообщения совсем. Только эти строчки поменял. Возвращаю назад - приходят, меняю - не приходят. Что-то еще не хватает?

(На сервер запрос приходит, ответ в браузер не приходит)

a400k4a
() автор топика
Последнее исправление: a400k4a (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.