Socket.io在Android上没有使用React Native

时间:2016-09-10 16:01:54

标签: socket.io react-native

我最近在学习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),但两者都没有用过。我错过了什么?任何建议都会非常感激!

2 个答案:

答案 0 :(得分:3)

VM react-native运行不是nodejs。这意味着您不能依赖socket.io-client这样的包依赖于nodejs本机模块(httpfscrypto等等)

即。 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,因此您有很多选项可供选择。希望这会有所帮助。