Skip to main content
 首页 » 编程设计

Socket.io 无法与 Android 上的 React Native 配合使用

2024年08月15日14zhengyun_ustc

我最近正在学习 React Native,但在使用 Socket.IO 时遇到了问题。我正在使用最新的 React Native 和 cli(刚刚更新),这是我的代码:

import React, { Component } from 'react'; 
import { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View 
} from 'react-native'; 
 
window.navigator.userAgent = 'react-native'; 
 
const io = require('socket.io-client/socket.io'); 
const socket = io('localhost:3000', { jsonp: false }); 
socket.connect(); 
 
class wschat extends Component { ... } 

可以看到,代码非常简单,并且没有错误。这是我的服务器代码:

"use strict"; 
const express = require('express'); 
const app = express(); 
const http = require('http').Server(app); 
const io = require('socket.io')(http); 
 
http.listen(3000, () => { 
    console.log('WSChat Server for React-Native listening on port 3000'); 
}); 
 
io.on('connection', (socket) => { 
    console.log('connected: ' + socket.id); 
}); 

看起来不错,而且它实际上可以在 ios 上运行,但在 android 上不起作用。我启用了远程调试器,并检查了属性,Socket.IO 本身已加载良好,但未建立连接。您可以看到服务器代码,当“连接”事件发生时,登录到控制台。

我使用了 AVD(nexus5) 和我的设备(LG G4 optimus),但两者都无法工作。我缺少什么?任何建议将非常感激!

请您参考如下方法:

虚拟机react-native运行的不是nodejs。这意味着您不能依赖诸如 socket.io-client 之类的包,而这些包又依赖于 Nodejs native 模块(httpfs加密等)

即socket.io-client 依赖于engine-i.o,在那里你会发现类似的东西:

var http = require('http'); 

狡猾的是,只要你处于开发模式,iOS 就由 Nodejs 支持,所以它可能看起来一切正常,但如果你编译应用程序,它就不会' t。

查看react-native-socketio ,遗憾的是(截至 2016 年 9 月 12 日)该项目维护得不好,但可以运行。