【问题标题】:Websocket server Spring BootWebsocket 服务器 Spring Boot
【发布时间】:2018-07-05 13:08:22
【问题描述】:

我在通过 Google Chrome 测试 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) 在 java.lang.Thread.run(Thread.java:748)

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

端点 URL:ws://localhost:8090/ExchangeService。 Spring Boot中嵌入的Tomcat版本为8.5.23

这里是服务器端点

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"); }

}

【问题讨论】:

  • 您能发布您的代码并添加更多信息吗?
  • 添加服务器端点代码

标签: tomcat spring-boot websocket


【解决方案1】:

最后通过 WebSocket 配置中的 setAllowedOrigins("*") 解决了

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

    }

谢谢!

【讨论】:

    【解决方案2】:

    您的 WebSocket 端点不起作用。 WebSocketConfig类应该是这样的

    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_service

    【讨论】:

    • ,我没有使用 stomp 消息传递,我还应该启用它吗?
    猜你喜欢
    • 2021-11-03
    • 2021-05-07
    • 2020-01-10
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2020-06-17
    相关资源
    最近更新 更多