2016-09-10 55 views
5

Tôi đang học React Native gần đây và gặp sự cố khi sử dụng Socket.IO. Tôi đang sử dụng React native và cli mới nhất (chỉ cần cập nhật), và đây là mã của tôi:Socket.io không hoạt động với React Native trên Android

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

Bạn có thể thấy, mã này khá đơn giản và không có lỗi. Đây là mã máy chủ của tôi:

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

Có vẻ tốt, và nó thực sự hoạt động với iOS nhưng không hoạt động trên Android. Tôi đã được kích hoạt trình gỡ lỗi từ xa, và kiểm tra các thuộc tính, và Socket.IO nó tự nó đã được tải tốt, nhưng không có kết nối được thành lập. Bạn có thể thấy mã máy chủ, khi sự kiện 'kết nối' xảy ra, hãy đăng nhập vào bảng điều khiển.

Tôi đã sử dụng AVD (nexus5) và thiết bị của mình (LG G4 optimus), nhưng cả hai đều không hoạt động. Tôi đang thiếu gì? Lời khuyên nào sẽ rất cảm kích!

Trả lời

3

VM-native chạy trong không phải là nodejs. Điều này có nghĩa bạn không thể dựa vào các gói như socket.io-client mà lần lượt dựa vào nodejs module mẹ đẻ (http, fs, crypto, vv)

Tức là socket.io-client dựa trên công cụ-io và ở đó bạn sẽ tìm thấy những thứ như:

var http = require('http'); 

gì láu cá là miễn là bạn đang ở trong dev-mode, iOS được hỗ trợ bởi nodejs, vì vậy nó có thể xem giống như tất cả đang hoạt động, nhưng nếu bạn biên dịch ứng dụng thì sẽ không.

Kiểm tra react-native-socketio, thật đáng buồn (tính đến 2016-09-12) dự án không được duy trì tốt, nhưng có thể được thực hiện để hoạt động.

0

Nếu bạn muốn sử dụng socket io cho dự án gốc phản ứng của mình, tôi khuyên bạn nên sử dụng lông js socket io.

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

khuôn khổ này cũng hỗ trợ Primus, Express, và REST, do đó bạn có nhiều lựa chọn để lựa chọn. Hy vọng điều này sẽ giúp.

Các vấn đề liên quan