mzo*_*zoz 6 java stomp websocket
以下代码来自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;
}
}
Run Code Online (Sandbox Code Playgroud)
客户端连接http://localhost:8080/portfolio建立WebSocket连接,我想知道客户端发送请求的确切网址是什么?
http://localhost:8080/portfolio/app
要么
http://localhost:8080/app?
在实际的WebSocket框架中,destination标头是否包含相对网址(例如/app)/topic或绝对网址?
[安卓] https://github.com/NaikSoftware/StompProtocolAndroid
[春季] https://docs.spring.io/spring/docs/5.1.9.RELEASE/spring-framework-reference/web.html#websocket-stomp
只需使用设置终点
addEndpoint("/portfolio");
Run Code Online (Sandbox Code Playgroud)
使用以下 URL 连接到 websocket
ws://localhost:8080/portfolio
Run Code Online (Sandbox Code Playgroud)
但请记住,您只需连接到套接字一次,然后调用没有 URL 的端点。因为socket是流线型连接,你只需要建立一次连接。
setApplicationDestinationPrefixes("/app");
Run Code Online (Sandbox Code Playgroud)
上面的行将使用此设置端点 /app,您只能通过套接字发布。但是,所有订阅此主题的人都会收到通知。
enableSimpleBroker("/topic");
Run Code Online (Sandbox Code Playgroud)
Broker 负责处理两者的订阅和发布,因为它们以双重方式侦听和发送数据,这意味着与 /app 不同的是发布和订阅。
private var mStompClient: StompClient? = null
mStompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, "ws://localhost:8080/portfolio")
Run Code Online (Sandbox Code Playgroud)
使用上面的行连接到 websocket。因为我们只需要连接到套接字端点一次,就用单例编写它。
val response = stomp.topic("/topic")
.subscribe { topicMessage -> }
Run Code Online (Sandbox Code Playgroud)
现在上面的行将订阅您的套接字客户端,这意味着无论何时您从 /topic 推送数据,都会通知此响应变量。
stompClient.send(StompMessage(StompCommand.SEND,
listOf(StompHeader(StompHeader.DESTINATION, "/topic")),
gson.toJson(myDataModel)))?
.subscribe()
Run Code Online (Sandbox Code Playgroud)
使用上面的行,您将向指定为 /topic 的套接字发送数据。
@MessageMapping("/action")
fun performDeviceAction(@Payload myDataModel: MyDataModel) {}
Run Code Online (Sandbox Code Playgroud)
使用上面的行从套接字 /action 上的客户端接收数据
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketTextHandler(), "/user");
}
Run Code Online (Sandbox Code Playgroud)
为了告诉 Spring 将客户端请求转发到端点,我们需要注册处理程序。上面的代码片段将注册一个客户端。
使用以下链接并下载源代码以获取更多信息 https://www.javainuse.com/spring/boot-websocket
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |