如何在javascript(客户端)和java(服务器)中完成WebSocket握手?

时间:2017-07-21 12:33:19

标签: javascript java html websocket

我用html和javascript编写了Websocket Client。和Java中的Websocket服务器。

var webSocket = new WebSocket('ws://localhost:8080/websocketendpoint');
@ServerEndpoint("/websocketendpoint")
public class WebSocketExample {
  

WebSocket连接到' ws:// localhost:8080 / websocketendpoint'   失败:WebSocket握手期间出错:意外的响应代码:   404

您能否建议如何创建websocket uri并使用服务器进行配置

1 个答案:

答案 0 :(得分:0)

我有一个带sockJS + stomp和Spring的小项目。

你需要一个配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer    {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
    config.setUserDestinationPrefix("/user");
}

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

}

这个想法也是在服务器端创建一个控制器:

@MessageMapping("/user")
@SendToUser("/topic/auth")
public JsonMessageWrapper process(JsonMessageWrapper jmw,
SimpMessageHeaderAccessor headerAccessor)

在客户端,您可以这样订阅:

    function connect() {
        var socket = new SockJS(/*[[@{/user}]]*/); // tricky mechanism of ThymeLeaf, produces a link attached to URL of deployed webapp with proper context
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function(frame) {
            setConnected(true);
            var subscribeUrl = '/topic/auth';
            stompClient.subscribe( subscribeUrl + '-user' + socket.sessionId, function(response){
                showMessage(response.body);
            });
        });
    }

这样你就发了一条信息:

    function send() {
        var message = document.getElementById('message').value;
        stompClient.send("/app/user", {}, message);
    }

P.S。我知道@Transactional使用不正确。

项目地点https://github.com/dk2k/websocket-server