java - Websocket 上的 Spring STOMP - "private"消息传递

标签 java spring websocket

我正在研究 WebSocket 聊天。我做了一个简单的,可以将每条消息发送给每个人。但我正在尝试制作类似私有(private)消息的东西,但我真的不知道该怎么做。我尝试了不同的选择,但我不明白如何让它发挥作用。

这是我的代码:

WebSocketConfig.java

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic/", "/queue/", "/user/");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    }
}

GreetingController.java

@Controller
public class GreetingController {

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(Message message) throws Exception {
        return new Greeting(message.getFrom_user_id(), message.getMessage(), message.getTo_user_id());

    }
}

还有我的 js 函数来连接和发送消息:

function connect() {
var socket = new SockJS('/gs-guide-websocket');
stompClient = Stomp.over(socket);
var theUserId = 1;
stompClient.connect({user:theUserId}, function (frame) {
    setConnected(true);
    console.log('Connected: ' + frame);
    //stompClient.subscribe('/topic/greetings', function (greeting) {
    stompClient.subscribe('/topic/greetings', function (greeting) {
        showGreeting(JSON.parse(greeting.body).content);
    });
});
}


function sendName() {
stompClient.send("/app/hello", {}, JSON.stringify(
        {
            'from_user_id': parseInt($("#from_user_id").val()), 
            'message': $("#message").val(),
            'to_user_id': parseInt($("#to_user_id").val())
        }));
}

如何让私信生效?有人可以向我解释它应该如何工作吗?

干杯安德鲁!

最佳答案

我们可以利用SimpMessagingTemplate将消息发送到适当的目标队列

文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/messaging/simp/SimpMessagingTemplate.html :

    @Autowired
    private SimpMessagingTemplate template;

    @MessageMapping("/hello")
    public void greeting(Message message) throws Exception {

     this.template.convertAndSend("/topic/"+message.getFrom_user_id(),message);

    }

据此在客户端定义订阅主题

关于java - Websocket 上的 Spring STOMP - "private"消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729201/

相关文章:

javascript - 是否可以使用 websocket 传输数据

java - 如何在没有entryId的情况下更新SQLiteOpenHelper中的条目?

java - 使用 hibernate 的spring mvc中的流未发送到 Controller

python - 为什么 websockets 连接在浏览器重新加载时不断关闭?

java - 将 Java 日期转换为 OffsetDateTime

java - Spring上下文配置文件问题

java - 使用 modifyHandshake 在 WebSocket 握手中添加 header

java - init-method 的确切替代方案(基于 Java)

Java Quartz cron 表达式

java - 使用 Maven 设置 Java 编译器的 -source 和 -target - 不起作用