我试图在不使用socketjs库的情况下测试websocket,而且我也不想添加任何stomp连接。
我正在关注stackoverflow问题中的示例: WebSocket with Sockjs & Spring 4 but without Stomp
所以没有stomp服务器,我已成功通过socketjs库与url连接:ws:// localhost:8080 / greeting / 741 / 0tb5jpyi / websocket
现在我想删除socketjs库以允许原始websocket连接(可能是android,ios等设备......)
当我删除参数:.withSockJS()时,我无法通过websocket连接。
我尝试了以下网址,但他们没有工作:
ws://localhost:8080/greeting/394/0d7xi9e1/websocket not worked
ws://localhost:8080/greeting/websocket not worked
ws://localhost:8080/greeting/ not worked
我应该使用哪个URL进行连接?
答案 0 :(得分:8)
我在项目中使用没有STOMP的websockets。
以下配置适用于spring-boot
。
在 pom.xml
中添加spring boot websocket依赖项<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>${spring-boot.version}</version>
</dependency>
然后添加一个类(这里WebSocketServerConfiguration.java
),它配置你的websocket:
@Configuration
@EnableWebSocket
public class WebSocketServerConfiguration implements WebSocketConfigurer {
@Autowired
protected MyWebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/as");
}
}
最后你可以编写你的WebsocketHandler。 Spring为WebSocketHandlers提供了不同的抽象类(在main-package中:org.springframework.web.socket.handler
)。我的websocket配置没有STOMP
,我的客户端不使用socket.js
。因此MyWebSocketHandler
扩展TextWebSocketHandler并覆盖错误,打开和关闭连接以及接收文本的方法。
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
...
@Override
public void handleTransportError(WebSocketSession session, Throwable throwable) throws Exception {
LOG.error("error occured at sender " + session, throwable);
...
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
LOG.info(String.format("Session %s closed because of %s", session.getId(), status.getReason()));
...
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOG.info("Connected ... " + session.getId());
...
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage jsonTextMessage) throws Exception {
LOG.debug("message received: " + jsonTextMessage.getPayload());
...
}
}
答案 1 :(得分:5)
您应该使用ws://localhost:8080/greeting
:
new WebSocket('ws://localhost:8080/greeting')
答案 2 :(得分:0)
我在客户端客户端无法连接到服务器时也面临同样的情况。
对我有用的是将下面的 setAllowedOrigins("*")
添加到自定义处理程序。
registry.addHandler(webSocketHandler, "/app").setAllowedOrigins("*");