2016-06-25 4 views
0

RNプロジェクトでwebsocketを使用したいと思います。そして、私はそれをサーバサイドでws、RNにwebsocket組み込みで組み込みました。 しかし、私は以前socket.ioを使っていたのでそれほど便利ではないようです。 RNで : は、だから私はsocket.ioを使用しようとしたsocket.io-client反応ネイティブで使用する場合の接続を維持する

コンポーネントで
import './userAgent' 
import io from "socket.io-client/socket.io" 

componentDidMount() { 
    this.socket = io('https://localhost:4080',{jsonp: false}); 
    this.socket.on('hello', (msg) =>{ 
     this.setState({response:msg}) 

    }); 
    } 
サーバーで

​​

そしてuserAgent.jsで

window.navigator.userAgent = 'react-native'; 

それは私がグーグルグッドした結果であり、彼らはうまくいくと言いました。しかし、私のために、クロムデバッガがで停止:

function load() { 
var r; 
try { 
    r = exports.storage.debug; 
} catch(e) {} 
return r; 
} 

そしてそれは、ストレージが定義されていないと言います。 次に、socket.io.jsを調べ、exports.storageがwindow.localStorageであることを確認します。そこで私はリモートのjsデバッグを無効にし、コードが実行され始めました。

しかし、サーバーはログを記録し続けます。つまり、ユーザーが接続しています。私のRNアプリがサーバーへの接続を維持しているかのように。そして、それはsocket.on()がクライアント側で動作しなかったようです。

反応し、ネイティブバージョン:0.27.2を

socket.ioクライアントのバージョン:1.4.8

誰もが知っている場所が間違っ起こっていますか?

答えて

3

最後に、socket.ioソースを調べた結果、解決策が見つかりました。 socket.ioはデフォルトで 'websocket'をトランスポートとして使用していないようです。私の場合は「ポーリング」を使用しますので、明示的に設定してください:

componentDidMount() { 
    var socket = io('http://localhost:4080', { jsonp: false, transports: ['websocket'] }) 
    socket.on('hello', (msg) => { 
     //do something 
    }); 
} 

これで動作します。 しかし、私がまだ混乱しているのは、ブラウザークライアントでは、私はトランスポートを設定せず、うまく動作しますが、反応ネイティブでは動作しません。理由は分かりません。

+0

こんにちは、あなたは反応クライアントで動作するようになったのですか?あなたはそれを使っている場所を分かち合うことができますか?私はいくつかの問題に直面している –

関連する問題