当前位置: 首页 > 知识库问答 >
问题:

WebSocket可以连接到本地服务器,但不能发送或接收

那鹏
2023-03-14

我正在两台本地服务器之间建立一个websocket进行开发

一端,我的Ionic应用程序运行在http://localhost:8100/

在另一端,我有一个Spring后端正在运行http://localhost:9080/(或http://127.0.0.1:9080)

连接已经建立,所以接下来我想用令牌发送一条消息到web套接字(我知道这可以在SockJS 1.1.0中设置连接时发送,但我目前使用的是0.3.4)

然而,我在后端的代码似乎没有响应,我想知道我的IP配置是否正确。我遵循了一个教程,并在另一个项目中实现了这一点。

任何有更多经验的人都知道订阅函数中的网址是否也需要以“localhost”或IP地址作为前缀?我知道webSocket从超文本传输协议://变为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");
    }
}

我的控制函数:

@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前缀其他网址:...

共有1个答案

解修然
2023-03-14

我找到答案了!

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

SpringWebSocket教程中也没有实现或提到这一点

 类似资料:
  • 我尝试使用Stomp(而不是SockJs)实现普通的网页口袋,其中包含Spring服务器和Angular客户端。 下面是我在Spring中启用websocket的代码: 但是我无法连接到它,当我尝试使用Stumpjs进行角度连接时,连接永远不会完成。当我使用wscat(顺便说一句, /api/很好)进行测试时,没有任何响应,它总是尝试连接但没有成功。 这里怎么了? 编辑:这是我使用的两个依赖项 编

  • 问题内容: 错误2002(HY000):无法通过套接字’/var/run/mysqld/mysqld.sock’(2)连接到本地MySQL服务器 我尝试了在互联网上找到的所有内容,但是无法解决在Ubuntu 11.04上出现的问题。 我尝试了这些事情: 使用手动启动mysqld 使用启动mysqld 检查它是否正在使用并获得结果 在手动创建文件 授予用户权限 试图删除并重新安装,但仍然无法正常工作

  • 我正在运行Docker容器,其中运行一个jar文件。 此jar文件需要访问Elasticsearch以读取数据,并且此Elasticsearch服务安装在本地计算机上(不在Docker容器中) 我需要从Docker容器连接到本地Elasticsearch服务以使其正常工作 我在Dockerfile中写了EXPOSE 9200 9300 service-port,我的Docker run命令如下,

  • 我创建了一个PHP websocket服务器脚本,如下所示。

  • C:\用户\跨度t 2\下载\apache-cassandra-3.11.5\bin 启动 Cassandra 服务器 C:\用户\跨度t 2\下载\apache-cassandra-3.11.5\bin 连接错误:('无法连接到任何服务器',{'127.0.0.1':错误(10061,"尝试连接到[('127.0.0.1',9042)]。最后一个错误:无法进行连接,因为目标机器主动拒绝它")})

  • 到“ws://example.app:8080/”的WebSocket连接失败:在收到握手响应之前连接已关闭