我最近在学习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),但两者都没有用过。我错过了什么?任何建议都会非常感激!
答案 0 :(得分:3)
VM react-native运行不是nodejs。这意味着您不能依赖socket.io-client
这样的包依赖于nodejs本机模块(http
,fs
,crypto
等等)
即。 socket.io-client依赖于engine-i.o,在那里你可以找到类似的东西:
var http = require('http');
什么是狡猾的是,只要你处于开发模式,iOS就会得到nodejs的支持,所以它可能看起来就像所有工作一样,但是如果你编译应用程序,它就赢了吨。
查看react-native-socketio,遗憾的是(截至2016-09-12)该项目维护得不好,但可以使其正常工作。
答案 1 :(得分:0)
如果你想为你的本机项目使用socket io,我建议你使用羽毛js socket io。
https://docs.feathersjs.com/api/socketio.html
此框架还支持Primus,Express和REST,因此您有很多选项可供选择。希望这会有所帮助。