2016-08-03 886 views
0

我正在设置两个本地服务器之间的websocket以进行开发。WebSocket可以连接到本地服务器,但不能发送或接收

在一端我有http://localhost:8100/

运行我离子的应用程序在另一端我有一个春天的后端上http://localhost:9080/(或http://127.0.0.1:9080

连接运行已经建立,所以接下来我要用令牌发送消息给websocket(我知道这可以在SockJS 1.1.0中建立连接时发送,但我目前使用的是0.3.4)

但是,我在后端的代码没有' t似乎回应,我想知道我的IP配置是否正确。我跟着一个教程,并在另一个项目中工作。

知道订阅功能中的url是否需要以'localhost'或IP地址为前缀的人有更多的经验吗?我知道websocket从http://更改为ws://所以我想当这种情况发生时,我需要在它前面添加如下内容:ws:// localhost:9080/...

无论如何,这里是我的代码:

WebSocet服务:

function init() { 
     var socket = new SockJS('http://127.0.0.1:9080/ws-notification'); 
     stompClient = Stomp.over(socket); 
     stompClient.connect({}, function(frame) { 
      console.log('Connected: ' + frame); 
      /** 
      * Subscribe at /ws-topic/greetings url to catch messages 
      */ 
      stompClient.subscribe('/ws-topic/greetings', function(greeting){ 
       notify(JSON.parse(greeting.body).content); 
      }); 
      parseAuthentication(); 
     }); 
    } 

    function parseAuthentication(){ 
     stompClient.send("/ws-app/ws-notification",{},JSON.stringify({ 'token': authenticationService.isAuthenticated() })); 
    } 


    function disconnect() { 
     if (stompClient != null) { 
      stompClient.disconnect(); 
     } 
     // setConnected(false); 
     console.log("Disconnected"); 
    } 

    function notify(message){ 
     console.log("NOTIFY: "+message); 
    } 

WebSocket的配置:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 


    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/ws-notification").setAllowedOrigins("*").withSockJS(); 
    } 

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

我Controllerfunction:

@MessageMapping("/ws-notification") 
@SendTo("/ws-topic/greetings") 
public Notify greeting(Notify notify) throws InterruptedException { 
    Thread.sleep(1000); 
    return new Notify("Hello, your token is :" + notify.getWsToken()); 
} 

请注意,当我在init()函数中设置连接时,我只指定了IP地址,试图用ws://127.0.0.1作为其他URL的前缀:但是没有运气!

回答

0

我找到了答案!

问题是我用来发送数据的模型中没有默认的构造方法。

这也未实现或者在Spring WebSocket Tutorial

+0

提到能否请你解释一下你是如何解决它exacly?我在该教程中看到的模型确实有默认的构造函数。对我来说,可以发送内容到春天,但我没有得到任何东西在订阅频道。 –

+0

@JanWytze它可能是对象通知,它有一个字符串构造函数,所以如果他忘记声明defalt构造函数,它将不存在,并且spring将失败。 – Walfrat

相关问题