Spring 4 websocket没有STOMP,socketjs

时间:2015-08-28 08:51:04

标签: spring websocket stomp spring-4 spring-websocket

我试图在不使用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进行连接?

3 个答案:

答案 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("*");