gpt4 book ai didi

java - 如何通过 Spring Webflux 中的 websockets 向特定客户端发送消息?

转载 作者:行者123 更新时间:2023-11-30 06:12:50 25 4
gpt4 key购买 nike

我在客户端中使用 ReactJS\redux 并在服务器中使用 spring-boot-starter-webflux\Reactor\Spring Boot 2 开发网络聊天。

服务器开发如here .

克林特以这种方式接收消息:

this.clientWebSocket = new WebSocket("ws://127.0.0.1:8080/websocket/chat");
this.clientWebSocket.onopen = function() {
}
this.clientWebSocket.onclose = function() {
}
this.clientWebSocket.onerror = function() {
}
var _this = this;
this.clientWebSocket.onmessage = function(dataFromServer) {
_this.updateMessages(dataFromServer);
}

一条消息将发送给所有客户端。 如何通过 websocket 向特定客户端发送消息?不适合所有人。

我找到了一些关于 SockJS 的教程,但我想使用 Spring Webflux\Reactor。

更新:

我在服务器中有以下配置:

@Bean
public HandlerMapping webSocketMapping(UnicastProcessor<Event> eventPublisher, Flux<Event> events) {
Map<String, Object> map = new HashMap<>();
map.put("/websocket/chat", new ChatSocketHandler(eventPublisher, events));
SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();
simpleUrlHandlerMapping.setUrlMap(map);

simpleUrlHandlerMapping.setOrder(10);
return simpleUrlHandlerMapping;
}

因此,我将消息从客户端发送到 /websocket/chat 路径。

我可以设置此路径让 Client1 发送消息到 /websocket/chat/chat1 和 Client2 发送消息到 /websocket/chat/chat2 吗?因此 /websocket/chat/chat1/websocket/chat/chat2 是不同的聊天。

例如Client1和Client3收到了/websocket/chat/chat1的消息,但没有收到/websocket/chat/chat2的消息?

聊天数量可以根据客户 Activity 动态变化。

最佳答案

Websocket 是一种客户端-服务器协议(protocol),因此从客户端到另一个客户端的发送只能通过服务器作为中介来完成。您需要完成的是在服务器上实现一个功能,如果收到特定消息(例如特殊的自定义 header 信息),您需要将其分派(dispatch)给相应的客户端(例如客户端 ID)。

由于协议(protocol)原因,无法将 Websocket 从客户端直接发送到另一个客户端。

有几个convertAndSendToUser(..) Spring WebSocketTemplate 中提供的方法。看看this answer 。描述的非常详细。

关于java - 如何通过 Spring Webflux 中的 websockets 向特定客户端发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com