我正在尝试在 Spring Boot 项目中使用 Javax JSR 356 API 实现服务器端 websocket 端点。我正在关注本教程。我知道在这个主题上有一些关于 SO 的问题,但我无法找到一个合理的解决方案。当我尝试使用客户端 (ARC) 连接到 websocket 时,它只报告“发生未知错误”。我检查了嵌入式 Tomcat 服务器的日志,但没有任何条目。根据 Tomcat 启动条目,应用程序的上下文路径为空 (""),因此我确定我使用正确的 URI 访问了 websocket。
这是我的代码:
@ServerEndpoint(value = "/socket", configurator = SpringConfigurator.class)
public class WebSocketController
{
@OnOpen
public void onOpen(Session session) throws IOException
{
System.out.println("Socket has been opened: " + session.getId());
}
@OnClose
public void onClose(Session session) throws IonException
{
System.out.println("Socket has been closed: " + session.getId());
}
}
Spring configuration class
@Configuration
public class WebSocketConfig
{
@Bean
public WebSocketController webSocketController()
{
return new WebSocketController();
}
@Bean
public ServletContextAware endpointExporterInitializer(final ApplicationContext applicationContext) {
return new ServletContextAware() {
@Override
public void setServletContext(ServletContext servletContext) {
ServerEndpointExporter serverEndpointExporter = new ServerEndpointExporter();
serverEndpointExporter.setApplicationContext(applicationContext);
try {
serverEndpointExporter.afterPropertiesSet();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
}
}
如何在 Spring Boot 应用程序中实现服务器端 websocket 端点?
相关分类