Я разрабатываю связь через веб-сокет между Spring-boot и React.Я создаю простое серверное приложение и простую веб-страницу, веб-страница устанавливает соединение с помощью webSocket.На стороне сервера используется Java с пружинной загрузкой, и веб-страница создается с помощью React.
Сторона с загрузочной пружиной отправляет и получает данные, но может использовать полученные данные только после закрытия соединения!Я хочу одновременный обмен данными
WebSocketConfiguration.java
@Configuration
@EnableWebSocket
public class WebSocketConfiguration implements WebSocketConfigurer {
@Autowired
protected MyWebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/test/websocket/channelAlpha");
}
}
MyWebSocketHandler.java
@Component
public class MyWebSocketHandler implements WebSocketHandler {
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("afterConnectionClosed");
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("afterConnectionEstablished");
int max = 0;
while ( true && max < 10 ) {
Thread.sleep( 3000 );
System.out.println("pulsing...");
session.sendMessage( new TextMessage("{\"pulse\": \"ciao\"}") );
max++;
}
session.close( CloseStatus.GOING_AWAY );
}
@Override
public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
System.out.println( webSocketMessage );
}
}
home.jsx
connect() {
let ref = this;
this.stream = new RealTime(
received => {
console.log( received.data );
},
error => {
console.error("error");
console.error(error);
},
() => {
console.log("connection open");
ref.stream.send( "Message from client" );
ref.pulse();
},
closeStatus => {
console.log("main - stream closed ["+ JSON.stringify(closeStatus) +"]");
}
);
}
// this method is called on start app
pulse() {
this.pulseOn++;
let ref = this;
setTimeout(function(){
ref.stream.send("xxx");
if( ref.pulseOn < 10 ) ref.pulse();
}, 1000);
}
}
realTime.js
export default class RealTime {
stream = null;
constructor( listener, onError, openListener, closeListener ) {
this.send = this.send.bind( this );
this.stream = new WebSocket("ws://localhost:5050/test/websocket/channelAlpha");
this.stream.onopen = openListener;
this.stream.onclose = closeListener;
this.stream.onerror = onError;
this.stream.onmessage = listener;
}
send( msg ) {
this.stream.send( msg );
}
};