我试图在Spring Boot中创建一个非常基本的套接字服务器示例。 我有以下课程
WebSocketConfigurer:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "/path");
}
@Bean
public WebSocketHandler myHandler() {
return new SimpleWebSocketHandler();
}
}
TextWebSocketHandler:
public class SimpleWebSocketHandler extends TextWebSocketHandler {
private static Logger logger = LoggerFactory.getLogger(SimpleWebSocketHandler.class);
@Override
public void afterConnectionEstablished(WebSocketSession session) {
logger.debug("Opened new session in instance " + this);
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message)
throws Exception {
String echoMessage = message.getPayload();
logger.debug(echoMessage);
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception)
throws Exception {
session.close(CloseStatus.SERVER_ERROR);
}
}
应用:
@SpringBootApplication
public class WebSocketServerApplication {
public static void main(String[] args) {
SpringApplication.run(WebSocketServerApplication.class, args);
}
}
然后我有一个C程序,它将打开一个套接字并将简单文本发送到服务器。
当我尝试在套接字上发送纯文本(例如“Hello”)时,我将以下错误消息发送回客户端:
HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date: Tue, 18 Aug 2015 09:22:05 GMT
Connection: close
服务器显示“解析HTTP请求标头时出错”消息。我假设这是预期的,因为服务器在嵌入式tomcat服务器中运行,并且仅为HTTP配置。
然后我尝试从C应用程序发送HTTP POST消息作为文本,例如
POST /path HTTP/1.0\r\n Content-Type: text/plain\r\n Content-Length: 5\r\n \r\n Hello
我在服务器端没有得到任何东西,客户端上的连接最终只是超时。
我错过了一些明显的东西?
我是否需要指定控制器类?当我在一个路径上注册Web套接字处理程序时,这个没有被覆盖吗?