![](/img/trans.png)
[英]Spring Boot - Stomp : '.' vs '/' in Message Destination
[英]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.