繁体   English   中英

STOMP目标网址与端点网址

[英]STOMP destination url vs endpoint url

以下代码来自spring mvc文档

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/portfolio");
    }

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

@Controller
public class GreetingController {

    @MessageMapping("/greeting") {
    public String handle(String greeting) {
        return "[" + getTimestamp() + ": " + greeting;
    }
}

客户端连接到http://localhost:8080/portfolio以建立WebSocket连接,我想知道客户端发送请求的确切URL是什么?

http://localhost:8080/portfolio/app

要么

http://localhost:8080/app

在实际的WebSocket框架中, destination标头是否包含相似的网址,如/app/topic或绝对网址?

[Android] https://github.com/NaikSoftware/StompProtocolAndroid

[Spring] https://docs.spring.io/spring/docs/5.1.9.RELEASE/spring-framework-reference/web.html#websocket-stomp

只需使用设置终点即可

addEndpoint("/portfolio");

使用以下Url连接到websocket

ws://localhost:8080/portfolio

但请记住,您必须只连接一次套接字,然后只调用没有URL的端点。 Beacause套接字是简化连接,您只需建立一次连接。

setApplicationDestinationPrefixes("/app");

以上行将使用此设置终点/应用程序,您只能通过套接字发布。 但是,所有订阅此主题的人都会收到通知。

enableSimpleBroker("/topic");

经纪人负责处理订阅和发布,因为他们倾听并以双向方式发送数据意味着发布和订阅都不同于/ app。

private var mStompClient: StompClient? = null
mStompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, "ws://localhost:8080/portfolio")

使用上面的行连接到websocket。 因为我们只需要在单例中写入一次就连接到套接字端点。

val response = stomp.topic("/topic")
.subscribe { topicMessage -> }

现在上面的行将订阅您的套接字客户端意味着无论何时从/ topic推送数据,这将通知此响应变量。

stompClient.send(StompMessage(StompCommand.SEND,
    listOf(StompHeader(StompHeader.DESTINATION, "/topic")),
    gson.toJson(myDataModel)))?
.subscribe()

使用上面的行,您将会将数据发送到指定为/ topic的套接字。

@MessageMapping("/action")
fun performDeviceAction(@Payload myDataModel: MyDataModel) {}

使用上面的行在socket / action上从客户端接收数据

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new SocketTextHandler(), "/user");
    }

为了告诉Spring将客户端请求转发到端点,我们需要注册处理程序。 上面的snipplet会注册一个客户端。

使用以下链接并下载源代码以获取更多信息https://www.javainuse.com/spring/boot-websocket

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM