react native 和 java 之间的 Socket.io

Posted

技术标签:

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

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

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

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

谢谢

【问题讨论】:

到目前为止你尝试过什么? :) @Rab 我一直在尝试 web socket 但没有用 【参考方案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 中不起作用。***.com/questions/47598305/…

以上是关于react native 和 java 之间的 Socket.io的主要内容,如果未能解决你的问题,请参考以下文章

在后端、react 和 react-native 客户端之间共享 typescript 代码

React Native 和 Flutter 安装 Windows 10 上无效的 JAVA_HOME 目录

React Native Android 状态栏和标题之间的空白

如何在 react-native webView 和 React web-app 之间进行通信?

React 和 React Native 之间的代码共享

React Native Android java.lang.ClassNotFoundException:找不到类