Я пытаюсь отправить данные через IOWebSocketChannel в Flutter.io на WebSocket, созданный в Spring-Boot.
В весенней загрузке я создал типичную конфигурацию WebSocket и контроллеры, которые имеют дело с манипуляциями клиента с мои серверы WebSocket. Я опубликую их ниже только для справки.
WebSocketConfiguration. java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry){
registry.addEndpoint("/websocket")
.setAllowedOrigins("*") // allow us to connect to ws://localhost:8080/websocket with the default Spring port configuration.
.withSockJS(); // allows a client which does not support WebSocket natively mimic a WebSocket over an HTTP connection
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry){ //The configureMessageBroker method sets up a simple (in-memory) message broker for our application
registry.enableSimpleBroker("/topic"); //topic to be routed back to client
registry.setApplicationDestinationPrefixes("/app"); //This configuration allows Spring to understand that any message sent to a WebSocket channel name prefixed with /app should be routed to a @MessageMapping in our application.
}
}
WebSocketController. java
@Controller
public class WebSocketController {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketController.class);
@MessageMapping("/send")
@SendTo("/topic/messages")
public Message send(Message message) {
LOGGER.info(String.format("Received message [%s]", message.toString()));
LocalDateTime timestamp = LocalDateTime.now();
return new Message(message.getFrom(), message.getMessage(), timestamp);
}
}
Теперь, когда я пытаюсь использовать IOWebSocketChannel, я выполняю типичный протокол подключения к моей настроенной веб-розетке. Ниже приведен код
final channel = IOWebSocketChannel.connect(
"ws://10.0.2.2:8080/websocket"
);
Затем я создал метод, который должен отправлять данные в мой веб-сокет, поэтому я пытаюсь подключиться к той конечной точке, которая, как вы видите, создается в WebSocketController. java с именем app/send/
. Ниже приведен код:
void _sendMessage() {
IOWebSocketChannel channel = IOWebSocketChannel.connect('ws://10.0.2.2:8080/app/send');
channel.sink.add(
json.encode({
"message": "bars",
})
);
}
Теперь, когда я проверяю свой сервер Spring-Boot, ничего не регистрируется, однако, всякий раз, когда я выполняю горячую перезагрузку в Flutter Spring Boot и время моего подключения к веб-сокету истекает, сервер tomcat возвращает это :
Итак, мой вопрос: удалось ли кому-нибудь сделать прорыв, отправив данные через веб-сокеты из Flutter в Spring-Boot с помощью IOWebSocketChannel? Мне также интересно, нашел ли кто-нибудь способ успешно использовать протокол STOMP во Flutter.io? Я использовал stomp_client , так как казалось, что он добьется цели, хотя и правильно, если я ошибаюсь, но флаттер сообщал мне об ошибках, говоря, что файлов html не существует, поэтому Я предполагаю, что библиотека предназначена только для дротиков в сети.