отправить сообщение между клиентом и сервером не хорошо, я использую socket.io в реагировать на родной - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь использовать Socket.io с собственным приложением реагировать, но у меня есть проблема между клиентской и серверной сторонами, я думаю, что это правильный код, но он не обновляет состояние при нажатии кнопки, соединениесделано, и я показываю, что журнал работает, я не показываю никаких ошибок в них!

, это мой код:

server / app.js

var app = require("express")();
var server = require("http").Server(app);
var io = require("socket.io")(server);

server.listen(8080);

app.get("/", function(req, res) {
  res.sendFile(__dirname + "/index.html");
});

io.on("connection", function(socket) {
  console.log(socket.id);
  socket.on("update", () => {
    console.log("update con");
    socket.emit("update");
  });
});

server /index.html

<h1>Welcome Socket.io !!</h1>
<button>Update</button>

<script src="/socket.io/socket.io.js"></script>

<script>
  var socket = io();
  var btn = document.querySelector("button");
  btn.onclick = function() {
    console.log("update func");
    socket.emit("update");
  };
</script>

App.js

import React, { Component } from "react";
import { StyleSheet, Text, View } from "react-native";
window.navigator.userAgent = "react-native";
import io from "socket.io-client";

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "HelloWorld"
    };
    this.socket = io("localhost:8080", { jsonp: false });
  }

  componentDidMount() {
    this.socket.on("update", () => {

      this.setState({ name: "updated name !" });
    });
  }
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.instructions}>{this.state.name}</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
    backgroundColor: "#F5FCFF"
  },
  welcome: {
    fontSize: 20,
    textAlign: "center",
    margin: 10
  },
  instructions: {
    textAlign: "center",
    color: "#333333",
    marginBottom: 5
  }
});

1 Ответ

0 голосов
/ 04 декабря 2018

Я думаю, что проблема связана с адресом вашего сокет-сервера.В App.js вы написали localhost, но если он в мобильном телефоне, так что эмулятор или устройство, то ваш адрес не может быть localhost.Это может быть 10.0.2.2 для эмулятора Android или вашего адреса ПК в сети Wi-Fi, доступного вашему ПК и вашему устройству.

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