私は既存のJetty 9アプリケーションwebappをSpring Bootに移行し始めていますが、Spring WebSocketHandlerとWebSocketSessionではなくJetty WebSocketHandlerを使用する方法がわかりません。Spring WebsocketをJetty Websocketに変換する
Spring WebSocketHandlerをApplication.javaに適切に設定することができ、Spring Framework DocumentationのJettyWebSocketHandlerAdaptorクラスとJettyWebSocketSessionクラスが見つかりましたが、それを使用する方法や良い方法を見つけることができませんでした例。
どのように私は桟橋にWebSocketHandlerを手渡すのですか? JettyWebSocketAdapterはObject以外のものから派生していないので、私はSpring WebSocketHandlerを登録しようとしていて、そのメソッドのすべてをJettyWebSocketHandlerに渡すようにしています。これを実行するために、私のそれは愚かである:
Application.java
は@EnableWebSocket
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements WebSocketConfigurer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
SpringWSHandler springPlease = new SpringWSHandler();
registry.addHandler(springPlease, "/websocket").setHandshakeHandler(handshaker());
}
@Bean
public DefaultHandshakeHandler handshaker()
{
WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
policy.setInputBufferSize(8192);
policy.setIdleTimeout(600000);
return new DefaultHandshakeHandler(new JettyRequestUpgradeStrategy(new WebSocketServerFactory(policy)));
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
春WebSocketHandler
@Component
public class SpringWSHandler implements WebSocketHandler {
private JettyHandler jettyHandler;
private JettyWebSocketSession jettySession;
private static Logger logger = LoggerFactory.getLogger(SpringWSHandler.class);
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.debug("Connection Established: " + session.getId());
jettySession = new JettyWebSocketSession(session.getAttributes());
jettyHandler = new JettyHandler(this, jettySession);
jettyHandler.onOpen(jettySession.getNativeSession());
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
logger.debug("Message from session: " + session.getId());
jettyHandler.onMessage(message.getPayload().toString());
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
//TODO
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
logger.debug("Closing the session: " + session.getId());
jettyHandler.onClose(closeStatus.getCode(), "Closing Connection");
session.close(closeStatus);
}
@Override
public boolean supportsPartialMessages() {
return true;
}
}
私は私のWebページを開いた後のWebSocket接続がいつでも閉じるように見えるので、それは関係なく、失敗しました私はそれを使用しようとします。私はjettyHandlerのメソッドを使用しようとしたら、接続が閉じ、例外がExceptionWebSocketHandlerDecorator例外です:
11:44:27.530 [qtp1014565006-19] ERROR o.s.w.s.h.ExceptionWebSocketHandlerDecorator - Unhandled error for ExceptionWebSocketHandlerDecorator [delegate=LoggingWebSocketHandlerDecorator [[email protected]]]
java.lang.NullPointerException: null
はどのように直接桟橋のWebSocketHandlerを使用して行くだろうか?私はSpringを理解していないので、Jetty WebSocketsにトラフィックを送る方法を本当に分かっています。 –