【问题标题】:Socket.io between react native and javareact native 和 java 之间的 Socket.io
【发布时间】:2019-03-31 04:25:09
【问题描述】:

我想在我的 react native 应用和 java 中的服务器之间创建实时数据。我试图用 WebSocket 做到这一点,但它没有解决它。

我是 react native 的新手,所以我没有很多知识。我正在寻找任何解释如何做到这一点的指南或任何示例,我一直在寻找但没有找到清楚的东西。

如果您对如何在 react native 和 java 之间处理实时数据有任何其他选择,我想听听

谢谢

【问题讨论】:

  • 到目前为止你尝试过什么? :)
  • @Rab 我一直在尝试 web socket 但没有用

标签: java react-native socket.io


【解决方案1】:

我不是这些主题的专家,但我正在使用 React JS 和 Java(Spring boot)开发类似的功能。最近我找到了一种使用 Stomp 和 SockJS 的方法。

这是我的 React JS 代码

import * as Stomp from 'stompjs';
import * as SockJS from 'sockjs-client';

...

  let timeout = 5000;
  let timeoutCounter = 0;
  const maxTimeoutCounter = 10;

  const connect = () => {

    const ws = new SockJS("http://localhost:8080/socket");
    this.stompClient = Stomp.over(ws);

    let that = this;

    that.stompClient.connect({}, function(frame) {

      that.stompClient.subscribe("/queue/update", (message) => {
        const data = JSON.parse(message.body);
        // Some code here
      });

    }, (error) => {
      timeoutCounter++;

      if (timeoutCounter < maxTimeoutCounter) {
        setTimeout(connect, timeoutCounter * timeout);
      }
    });
  }

这是我配置 Spring Boot 的 Java 代码的一部分:

import java.util.LinkedList;
import java.util.Map;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.ChannelInterceptor;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

   @Override
   public void registerStompEndpoints(StompEndpointRegistry registry) {

      registry
         .addEndpoint("/socket")
         .setAllowedOrigins("*")
         .withSockJS();
   }

   public void configureMessageBroker(MessageBrokerRegistry registry) {

      registry
         .setApplicationDestinationPrefixes("/app")
         .enableSimpleBroker("/queue/update");
   }
   ...
}

【讨论】:

  • 谢谢您的回答...您认为它可以与本机反应吗?你从 'stompjs' 和 'sockjs-client' 库中带来了什么?你能提供 setTimeout 函数的代码吗?另一个问题是,如果您收到消息,您将如何处理?你如何再次运行渲染函数?
  • 我认为这应该适用于 react-native。我使用“npm install sockjs-client”和“npm install stompjs”安装了这些库。 setTimeout 函数是 Javascript 的通用函数。当我收到来自服务器的消息时,我只需启动一个 redux 操作,以便在 redux 状态更改时调用 render 方法。
  • React Native 中的 Stomp 在 android 中不起作用。stackoverflow.com/questions/47598305/…
猜你喜欢
  • 2020-02-12
  • 2018-11-17
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 2021-04-06
  • 2020-12-31
相关资源
最近更新 更多