我正在设置两个本地服务器之间的websocket以进行开发。WebSocket可以连接到本地服务器,但不能发送或接收
运行我离子的应用程序在另一端我有一个春天的后端上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的前缀:但是没有运气!
提到能否请你解释一下你是如何解决它exacly?我在该教程中看到的模型确实有默认的构造函数。对我来说,可以发送内容到春天,但我没有得到任何东西在订阅频道。 –
@JanWytze它可能是对象通知,它有一个字符串构造函数,所以如果他忘记声明defalt构造函数,它将不存在,并且spring将失败。 – Walfrat