2016-05-29 152 views
2

我創建了簡單的socket.io服務器並對原生項目進行了測試,但React Native上的socket.io完全無法工作。 我在控制檯上打印了「socket.io-client」,並且它裝載得很好,並且我使用socket.io製作了簡單的HTML文件,它可以工作,但只有React Native不起作用。 我使用的是React native 0.26.2和socket.io 1.4.6。React Native與socket.io不起作用

這是我的服務器代碼:

"strict mode"; 
const express = require('express'); 
const app = express(); 
const http = require('http').Server(app); 
const io = require('socket.io')(http); 

io.on('connection', (socket) => { 
    console.log('user connected'); 
}); 

http.listen(3000,() => { 
    console.log('server started on 3000'); 
}); 

// web testing 
app.get('/', (req, res, next) => { 
    res.sendFile(__dirname + '/index.html'); 
}); 

,這是RN代碼:

import React, { Component } from 'react'; 
import { AppRegistry, StyleSheet, Text, TextInput, TouchableHighlight, View } from 'react-native'; 

import "./userAgent"; //window.navigator.userAgent = "react-native"; 

const io = require('socket.io-client/socket.io'); 

class SocketChat extends Component { 
    constructor(props) { 
     super(props); 
     this.socket = io('localhost:3000', { jsonp: false }); 
     this.state = { 
      text: null 
     }; 
    } 
    ... 
} 

我聽說,採用原生作出反應與socket.io使AJAX長輪詢,而不是WebSocket的,所以我添加了「用戶代理」技巧。無論它是否工作,即使連接沒有建立,但如果我嘗試瀏覽器,它運作良好。我非常感謝告訴我該怎麼做。

+0

我還創建了帶'ws'模塊的websocket服務器,並將代碼直接更改爲使用websocket(正式由react-native支持),要麼不工作。 – modernator

+0

我剛剛在iOS上檢查過,它工作。所以我測試了我的android設備(不是虛擬設備),它沒有工作。我認爲有一些問題。任何意見將不勝感激。 – modernator

回答

0

我通過替換另一個websocket模塊解決了這個問題。 Socket.IO在Android上不起作用,正如有人對我說的,Socket.io在內部使用節點本地模塊,因此在構建生產應用程序後它不應該起作用。