2016-09-27 17 views
1

React NativeでSocket.ioが正常に動作しないと聞きましたので、代わりにプレーンWebSocketを使用することにしました。WebSocketでReact Nativeが動作しない

私はWebSocketサーバーを実装するためにnode.jsを使用していますが、それは難しくありませんでした。ブラウザでは、私はすべて、Reactのネイティブで成功したことはありませんでした。

これらは

は私がのWebSocketサーバーを実装するためにしようとしたものです:

  • 急行-WS
  • WS

急行-WSはちょうどすべてのエラーメッセージなしで働いていませんでした。ちょうどそれは何かを接続できなかったと言いました。

私はモジュールをwsに変更しました。このモジュールにはクライアントとサーバーの両方が必要です。サーバーが働いたが、ときAVDのAndroidとアプリで、それはsaids:

は、モジュールがあることを確認します.IF不明モジュール「URL」を必要と は、「インストールNPM」パッケージャを再起動したり、実行してみてください。

私はnode_modulesディレクトリを完全に削除して再インストールしましたが、同じエラーが再度表示されました。

私はノードv6.2.2を使用しており、react-native-cli 1.0.0、react-native 0.33.0を使用しています。

これは、(WSモジュールのreadmeと同じ)、WSモジュールとサーバーコードです:

var WebSocketServer = require('ws').Server; 
var wss = new WebSocketServer({ port: 3000 }); 

wss.on('connection', (socket) => { 
    socket.on('message', (msg) => { 
     console.log('Received: ' + msg); 
    }); 

    socket.send('something'); 
}); 

これは、クライアントである:

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

const WebSocket = require('ws'); 

class wschat extends Component { 
    constructor() { 
     super(); 
    } 
    componentDidMount() { 
     var socket = new WebSocket("ws://localhost:3000"); 

     socket.on('open',() => { 
      socket.send('something'); 
     }); 
     socket.on('message', (data, flags) => { 
      console.log(data); 
      console.log(flags); 
     }); 
    } 
    ... 

競合を付けないようにするために、私はWebSock代わりのWebSocket際に使用しましたwsモジュールが必要ですが、それは問題ではありませんでした。

私は逃したものがありますか? React Native docはあまり説明がなく、実際の例を見つけるのは難しいです。読んでいただきありがとうございました。アドバイスをいただければ幸いです。

+0

私も最初のWebSocket =は( 'WS')を必要と 'のconstを削除しようと、この問題で立ち往生' WebSicketはRNにデフォルトで提供されています。 動作したら教えてください – MTo

+0

バックエンドが自分のデバイスの 'localhost'ではなく、自分のコンピュータの' localhost'で動いているとわかるまで、私はRNコードで 'localhost:3000'と同じような問題を抱えていました。 。一度私のローカルIPアドレスに置き換えると、それは働いた。 – user132169

答えて

1

最新のreact nativeはwebsocketをサポートしているので、サードパーティのwebsocketクライアントライブラリに依存する必要はありません。

次の例はreact native 0.45に基づいており、プロジェクトはcreate-react-native-appによって生成されています。

import React, {Component} from 'react'; 
import {Text, View} from 'react-native'; 

export default class App extends React.Component { 

    constructor() { 
     super(); 

     this.state = { 
      echo: '' 
     }; 
    } 

    componentDidMount() { 
     var socket = new WebSocket('wss://echo.websocket.org/'); 

     socket.onopen =() => socket.send(new Date().toGMTString()); 

     socket.onmessage = ({data}) => { 
      console.log(data); 

      this.setState({echo: data}); 

      setTimeout(() => { 
       socket.send(new Date().toGMTString()); 
      }, 3000); 
     } 
    } 

    render() { 
     return (
      <View> 
       <Text>websocket echo: {this.state.echo}</Text> 
      </View> 
     ); 
    } 
} 
関連する問題