当前位置: 首页 > 面试题库 >

是否可以将React Native与socket.io结合使用

翟冯浩
2023-03-14
问题内容

我正在使用Phonegap + React.js和Socket.io开发一个应用程序。但是,随后React-Native发行了,其原生感觉很棒。

我试图让socket.io-client与React
Native一起工作,但是不幸的是没有成功。我做了一些研究,发现与此问题中描述的错误完全相同:https : //github.com/facebook/react-
native/issues/375

关于此问题的评论说,尝试使用fetch API来获取JS模块,但我认为我做错了:

var socketScript;    
fetch('https://cdn.socket.io/socket.io-1.2.0.js')
    .then(function(response) {
        socketScript = response._bodyText;
    }).done(function() {
        var socket = socketScript.io();
    });

这将返回 未定义的不是函数

有什么方法可以使socket.io-client与React Native一起工作?还是我看错了方向?也许还有其他更合适的解决方案?


问题答案:

对于像我这样的人,在此问题上tum绊绊,寻找如何将socket.io与react native集成在一起。

由于React Native短时间内支持websocket,因此您现在可以使用Socket.io轻松地设置Web套接字。您要做的只是以下内容

  1. npm install socket.io-client
  2. 首次进口本机
  3. 分配 window.navigator.userAgent = 'react-native';
  4. 导入socket.io-client / socket.io
  5. 在构造函数中分配 this.socket = io('localhost:3001', {jsonp: false});

因此,在npm安装socket.io-client之后,它看起来应该像这样:

import React from 'react-native';

// ... [other imports]

import './UserAgent';

import io from 'socket.io-client/socket.io';

export default class App extends Component {
  constructor(props) {
    super(props);
    this.socket = io('localhost:3001', {jsonp: false});
  }

  // now you can use sockets with this.socket.io(...)
  // or any other functionality within socket.io!

  ...
}

然后在“ UserAgent.js”中:

window.navigator.userAgent = 'react-native';

注意:因为悬挂了ES6模块的导入,所以我们不能在与react-native和socket.io导入相同的文件中进行userAgent分配,因此是单独的模块。

编辑:

上面的解决方案应该可以,但是在这种情况下,请不要尝试创建单独的socketConfig.js文件。在其中导入任何需要的东西,包括const io = require('socket.io-client/socket.io');并且window.navigator.userAgent = 'react- native';需要socket.io-
client之前。然后,您可以在此处连接套接字,并将所有侦听器放在一个位置。然后,可以将操作或功能导入配置文件,并在侦听器接收数据时执行。



 类似资料:
  • 是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序? 类似这样: John在他的手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行创建套接字的Lambda函数。io服务器并将更新推送到所有订户,他的手机打开了应用程序,因此应用程序会自动更新新照片。 这可以通过

  • 问题内容: 我正在使用与此类似的命令: 尽管我没有使用chmod,但我使用的是其他命令,在此不再列出。此命令运行正常。但是,有成千上万的文件和目录要操作,并且此操作需要一些时间。我想知道是否可以在操作完成后显示某种总数?也许算个修改过的文件? 我唯一能想到的就是做类似的事情: 那行得通吗?至少我们可以看到正在发生某些事情……有人有更好的建议吗? 问题答案: 这有效: 您必须花一秒钟的时间才能起作用

  • 我想制作Java应用程序。使用CEF3库。CEF是在任何应用程序中嵌入谷歌Chrome浏览器的库。LWJGL用于编写Java的GL代码。但是在使用CEF之前,基本问题是如何混合C和Java。 > Java main将C部分调用为DLL C部分创建窗口并设置GL上下文 在消息循环中,C再次回调Java部分,以便在Java中完成一些GL工作。 以下测试代码失败,并显示消息: 本机方法中的致命错误:线程

  • 我已经检查的内容: 我曾考虑用QueryDSL生成SQL查询字符串,并在MyBatis中使用它的'@SelectProvider'注释,但这似乎是一个死胡同:MyBatis在它的SQL字符串中需要“${xxx}”的东西,但QueryDSL只生成基于实际Java类型的查询,所以它甚至对ID也不起作用。 作为querydsl/jooq的替代方案的mybatis生成器:相当糟糕的替代方案,因为它实际上生

  • 我想让flume代理位于hadoop集群之外,并想知道是否有可能使用flume通过WebHDFS向hadoop集群发送消息。 如果没有,是否有使用WebHDFS的替代方案?使用多层水槽层仍然需要我在hadoop集群中运行水槽代理。

  • 问题内容: 1个 结果集 : 2个 结果集2: 有没有办法可以做到这一点: 我想在RHEL 5上使用Sybase 12.5的解决方案,我也想知道在其他任何数据库系统中是否可行。 -–谢谢您的回答- 问题答案: 通过为该列使用CASE / WHEN并基于true / false求和1或0,您可以在同一查询中获得这两者。此外,如果您希望将另一个值的总和作为另一个,则可以执行相同的操作列…只需将其替换为