2016-09-10 9 views
5

Uczę się ostatnio React Native i mam problemy z korzystaniem z Socket.IO. Używam najnowszy React rodzimych i CLI (tylko aktualizacja), a to jest mój kod:Socket.io nie działa z React Native na Androida

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 { ... } 

Można zobaczyć, kod jest dość prosty, a nie błąd. To jest mój kod serwera:

"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); 
}); 

Wydaje się być w porządku, i faktycznie działa z ios, ale nie działał na Androidzie. Zostałem włączony zdalny debugger i sprawdziłem właściwości, a Socket.IO samo się ładowało, ale nie ustanowiono żadnego połączenia. Możesz zobaczyć kod serwera, kiedy wystąpiło zdarzenie "połączenie", zalogowana konsola.

Użyłem AVD (nexus5) i mojego urządzenia (LG G4 optimus), ale oba nie będą działać. czego mi brakuje? Każda rada będzie bardzo wdzięczna!

Odpowiedz

3

Reakcja native-VM na działanie nie jest nodejs. Oznacza to, że nie można polegać na opakowaniach takich jak socket.io-client które z kolei opierają się na nodejs modułów rodzimych (http, fs, crypto, etc)

tj socket.io-klient opiera się na silniku-IO i znajdziesz tam rzeczy jak:

var http = require('http'); 

Co przebiegły jest to, że tak długo, jak jesteś w dev-mode, iOS jest wspierany przez nodejs, więc to może spójrz na jak wszystko działa, ale jeśli skompilujesz aplikację, nie będzie.

Sprawdź react-native-socketio, niestety (stan na dzień 2016-09-12) projekt nie jest dobrze utrzymany, ale można go uruchomić.

0

Jeśli chcesz użyć socket io dla swojego natywnego projektu, proponuję użyć pióra js socket io.

https://docs.feathersjs.com/api/socketio.html

Ramy obsługuje również Primus Express i odpoczynek więc masz wiele opcji do wyboru. Mam nadzieję, że to pomoże.

Powiązane problemy