Tomcat Websocket服务器春季启动

Tomcat Websocket服务器春季启动,tomcat,spring-boot,websocket,Tomcat,Spring Boot,Websocket,我在通过谷歌浏览器测试WebSocket ServerEndPoint时遇到以下错误 2018-01-26 04:27:02[http-nio-8090-exec-5]调试 o、 a.coyote.http11.Http11Processor-分析HTTP请求头时出错 “java.io.EOFException:在 org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:125

我在通过谷歌浏览器测试WebSocket ServerEndPoint时遇到以下错误

2018-01-26 04:27:02[http-nio-8090-exec-5]调试 o、 a.coyote.http11.Http11Processor-分析HTTP请求头时出错 “java.io.EOFException:在 org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1250) 在 org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1190) 在 org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:717) 在 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:366) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 运行(Thread.java:748)

我在谷歌上搜索发现,当你的URL太长时,就会发生这种情况,但在我的情况下不是这样

端点URL:
ws://localhost:8090/ExchangeService
。Tomcat嵌入Spring引导的版本是8.5.23

这是ServerEndPoint

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig  implements WebSocketConfigurer {

    @Autowired
    private ApplicationContext context;

    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(context.getBean(ExchangeService.class), "/ExchangeService"); }

}

您的WebSocket终结点不工作。类
WebSocket配置
应如下所示

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {


    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/exchange_service");
    }

}
(我使用的是Spring Boot 2.0.0.M7)


对于端点
ws://localhost:8090/exchange\u service

最终通过在WebSocket配置中设置AllowedOriginates(“*”)解决了它

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(context.getBean(TestWebSocket.class), "/ExchangeService").setAllowedOrigins("*");

    }

谢谢!

您能发布您的代码并添加更多信息吗?添加了服务器端点代码,我没有使用stomp消息,我应该仍然启用它吗?