React Native和Java之间的Socket.io

时间:2018-10-26 11:56:37

标签: java react-native socket.io

我想在React Native中的应用程序与Java中的服务器之间创建实时数据。我当时试图用WebSocket来做到这一点,但它不适合它。

我是本机反应的新手,所以我没有很多知识。我正在寻找任何说明如何执行该操作的指南或任何示例,我一直在寻找并且没有找到明确的地方。

如果您还有其他选择,如何在我想听到的本机和Java之间进行实时数据

谢谢

1 个答案:

答案 0 :(得分:0)

我不是这些主题的专家,但是我正在使用React JS和Java(春季启动)来开发类似功能。最近,我找到了一种使用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");
   }
   ...
}