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

mod*_*tor 6 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 { ... }
Run Code Online (Sandbox Code Playgroud)

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

"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);
});
Run Code Online (Sandbox Code Playgroud)

看起来很好,它实际上与ios一起使用,但不适用于android.我启用了远程调试器,并检查了属性,Socket.IO它自己加载得很好,但没有建立连接.当"连接"事件发生时,您可以在控制台上看到服务器代码.

我使用了AVD(nexus5)和我的设备(LG G4 optimus),但两者都不起作用.我错过了什么?任何建议都会非常感激!

Mar*_*ten 4

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

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

var http = require('http');
Run Code Online (Sandbox Code Playgroud)

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

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


归档时间:

查看次数:

2720 次

最近记录:

8 年,6 月 前