当前位置: 首页 > 知识库问答 >
问题:

在每次http请求时向客户端发送stomp消息

萧自珍
2023-03-14

我有一个Spring Boot服务器和一个客户端,它们使用STOMP通过Websockets连接。

我的用例是,每次向特定endpoint发出http请求时,我都想向客户机发送数据。我找到的所有教程,只展示了这种情况,客户端向“/hello”发送一些数据,服务器通过向“topic/greetings”发送数据做出反应:

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}

我需要的是一个控制器方法,它无需消息映射即可发送数据。它应该只是在每次有人对endpoint执行 get 请求时将数据发送到客户端。我尝试了以下方法,但不起作用:

@Autowired
private SimpMessagingTemplate msgTemplate;

@SendTo("topic/data-received")
@RequestMapping(value = "/send-data", method = RequestMethod.POST)
public String sendData(@RequestHeader(value = "id") String id,
                               @RequestHeader(value = "data") String data) {

    User user = new User();
    user.id = UUID.fromString(id);
    user.stringData = data;
    database.saveStringData(user);
    msgTemplate.convertAndSend("topic/data-received", "data sent!!");
    return "successful";
}

这是我的客户代码:

function connect() {
var socket = new SockJS('/clipboard-websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    stompClient.subscribe('topic/data-received/', function (message) {
        alert("Data received!!");
    });
}

这是我的WebSocket配置:

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

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

共有1个答案

景鸿才
2023-03-14

目标中缺少尾随斜线

msgTemplate.convertAndSend("/topic/data-received", "data sent!!");

github-repo-issue-54498776

 类似资料:
  • 我使用Spring的STOMP over WebSocket实现与一个全功能的ActiveMQ代理。当用户向主题订阅时,在成功订阅之前必须通过一些权限逻辑。我使用ChannelInterceptor应用权限逻辑,如下所示: WebSocketConfig。爪哇: WebSocketSecurityConfig.java: MySubscriptionInterceptor。爪哇: 当没有足够权限的

  • 问题内容: 我正在使用Java开发RESTful Web服务。如果出现问题,我需要一种将错误消息发送给客户端的好方法。 根据Javadoc的规定, “由于message参数含义不明确 ,因此不建议使用 ”。 有没有设置状态消息或响应的“ 原因短语 ”的首选方法?该方法不这样做。 编辑:为了澄清,我想修改HTTP状态行,即不是主体内容。具体来说,我想发送类似的回复。 问题答案: 我认为任何RESTf

  • 我在firefox web Browser中使用Rest Client add on。我想测试一个处理HTTP POST请求并使用JSON的web服务。我如何使用Rest Client测试它? 如果在请求正文中添加json,将得到一个*HTTP 415不受支持的媒体类型错误*。 这样做的正确方法是什么?

  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常

  • 问题内容: 我只能在用户的套接字ID直接存储在io.sockets.on(’connect’)函数中时向用户发出消息。我不知道为什么在登录后尝试存储其套接字ID时为什么不起作用。 加工: 无法运作: JavaScript客户端代码段 解决方案:感谢@alessioalex, 我不得不从登录页面中删除对socket.io的引用,并将以下内容添加到io.sockets.on(’connection’)