我最近正在学习 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 模块(http
、fs
、 加密
等)
即socket.io-client 依赖于engine-i.o,在那里你会发现类似的东西:
var http = require('http');
狡猾的是,只要你处于开发模式,iOS 就由 Nodejs 支持,所以它可能看起来一切正常,但如果你编译应用程序,它就不会' t。
查看react-native-socketio ,遗憾的是(截至 2016 年 9 月 12 日)该项目维护得不好,但可以运行。