Как использовать веб-сокет? - PullRequest
0 голосов
/ 09 мая 2018

Структура проекта

структура проекта

Проблема

Как вы видите выше, я хочу подключить React-Native-App к React-Web с помощью websocket.

Мне удалось отправить данные из приложения React Native в Server.js, но не удалось отправить данные из Server.js в React Web Client (App.js).

Вот структура каталогов My React (Web).

Реагировать (Веб) Структура

/client
  /node_modules
  /public
  /src
    /App.js
  package.json
server.js
package.json

И мой код.

код

  • App.js (React Web: ../client/src/App.js)

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

const WebSocket = require('ws');

class App extends Component {
  componentDidMount() {
    let ws = new WebSocket('ws://localhost:8080');
    ws.on('message', function incoming(data) {
      console.log(data);
    });
  }

  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;
  • Server.js (React Web: ../Server.js)

/**
 * WebSocket
 */

const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

//initialize a simple http server
const server = http.createServer(app);

//initialize the WebSocket server instance
const wss = new WebSocket.Server({ server });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(data) {
    // Broadcast to everyone else.
    wss.clients.forEach(function each(client) {
      console.log('client', client);
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(data);
      }
    });
    console.log('received: %s', data);
    ws.send(`Hello, you sent -> ${data}`);
  });

  ws.on('hello', function incoming(data) {
    console.log('received: %s', data);
  });
  ws.send('Hi there, I am a WebSocket server');
});

//start our server
server.listen(process.env.PORT || 8080, () => {
    console.log(`Server started on port ${server.address().port} :)`);
});
  • App.js (React Native App)

class App extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            open: false,
            connected: false,
        };

        this.socket = new WebSocket('ws://127.0.0.1:8080');
        this.socket.onopen = () => {
          this.setState({connected:true})
        }; 
        this.testPusher = this.testPusher.bind(this);
    }
    
    testPusher() {
        console.log('testPusher');
        if( this.state.connected ) {
            this.socket.send(JSON.stringify({
                messgaes: 'hello~!~!~!',
            }))
            this.setState(prevState => ({ open: !prevState.open }))
        }
    }
    
    // ...
}

Как я могу это сделать?

Пожалуйста, дайте мне знать, спасибо!

Есть ли другое решение?

Если есть, пожалуйста, порекомендуйте меня!

Спасибо за чтение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...