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 状态栏和标题之间的空白