【问题标题】:How can I send rest request to socket如何将休息请求发送到套接字
【发布时间】:2018-12-15 12:53:47
【问题描述】:

我尝试创建一个通过套接字发送请求的 API。

代码:

@Controller
public class GreetingController {
    @GetMapping("/x")
    public void send() {
        greeting(new HelloMessage("Admin", "bla"));
    }
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) {
        return new Greeting(HtmlUtils.htmlEscape(message.getName() + ": " + message.getMsg()));
    }
}

我不明白如何通过 rest 向 websocket 发送请求。 谁能解释为什么当我向/x 发送请求时,websocket 没有得到new HelloMessage

【问题讨论】:

  • 定义“不起作用”。
  • @DaveNewton 监听socket的客户端收不到消息
  • 您可以添加您的客户端代码吗?可能与此有关:)

标签: java spring rest websocket


【解决方案1】:

当您从同一个类中调用另一个方法时,您只需这样做:调用一个方法。这个方法调用不关心被调用的方法是否有注解。

greeting() 方法仅在从 websocket 客户端调用时发送消息,将消息发布到/hello

要以编程方式发送消息,请使用 SimpMessageTemplate,as documented

如果您想从应用程序的任何部分向连接的客户端发送消息怎么办?任何应用程序组件都可以向 brokerChannel 发送消息。最简单的方法是注入一个 SimpMessagingTemplate 并使用它来发送消息。通常,您会按类型注入它,如下例所示:

@Controller
public class GreetingController {

    private SimpMessagingTemplate template;

    @Autowired
    public GreetingController(SimpMessagingTemplate template) {
        this.template = template;
    }

    @RequestMapping(path="/greetings", method=POST)
    public void greet(String greeting) {
        String text = "[" + getTimestamp() + "]:" + greeting;
        this.template.convertAndSend("/topic/greetings", text);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多