繁体   English   中英

如何在javascript(client)和java(server)中完成WebSocket握手?

[英]How to Complete a WebSocket Handshake in javascript(client) and java (server)?

我已经用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以及如何使用服务器进行配置

我有一个使用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);
    }

PS我知道@Transactional使用不正确。

项目的位置https://github.com/dk2k/websocket-server

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM