【问题标题】:Hosting an Express server in React Native在 React Native 中托管 Express 服务器
【发布时间】:2019-07-19 23:54:28
【问题描述】:

我正在尝试使用 React Native 构建一个实时多人游戏,基本上我想将其中一部手机作为我的服务器,另一部作为连接到服务器的客户端。 这是我的 Express 服务器:

server.js

let app = require('express')();
let port = 3000;
let server = require('http').createServer(app)
let io = require ('socket.io')(server)


module.exports = startServer = () => {
    io.on("connection", () => {
        console.log("someone has connected");
    })

    server.listen(port, () => {console.log("server is running at " + port)})
}

App.js

import React, { Fragment } from "react";
import {
  SafeAreaView,
  StyleSheet,
  ScrollView,
  View,
  TextInput,
  Text,
  StatusBar
} from "react-native";
let startServer = require('./server')


class App extends React.Component {

  componentDidMount() {
    startServer();
  }

  render() {
    return (
      <View style={{justifyContent: 'center', alignContent: 'center', flex: 1}}>
        <TextInput style={{borderBottomWidth: 1}}/>
      </View>
    );
  }
}

const styles = StyleSheet.create({});

export default App;

我在componentDidMount中使用startServer来启动服务器(就像我们使用node server.js一样)。

client.js

let io = require('socket.io-client');
let port = 3000

start = () => {
    socket = io(someIP + ":" + port);
}

所以有几个问题:
1-我实现这个的一般方法是否合理且合适?
2-React Native 无法做到解析模块http,在 React Native 中创建服务器的替代方法是什么?
3- 我必须在 client.js 中连接的服务器的 ip 是多少? (所有设备都必须连接到同一个互联网网络吗?)

【问题讨论】:

    标签: react-native express socket.io


    【解决方案1】:
    1. 个人认为让手机托管游戏服务器并不是一个好的设计选择。由于网络不稳定,将引入令人难以置信的延迟和延迟。如果您在网络上,为什么不直接使用 socketio 调用外部服务器。

    2. 这很适合。稍微搜索了一下,发现“React Native 没有实现 node apis,这就是你不能使用 http 模块的原因”。来自 react-natives github 页面上的 janicduplessis。我确实找到了一个包 react-native-http-bridge,但我认为它不支持 socketio。有趣的是,我之前研究过在手机上运行服务器,并且有一些本机软件包可以为您执行此操作(我认为它使用 WebSocket 在 android pad 上托管 POS 系统)。但整个事情感觉有点像黑客。

    3. 我想 10.0.2.2:port for android。 Idk 关于 IOS。并且您必须将其他人的电话连接到您的本地 IP 地址,例如 192.168.1.06:port。它应该在您手机的网络设置中显示。有时您也必须使用该本地 IP 地址连接到您自己的手机。除非我尝试,否则不确定。

    【讨论】:

    • 他们不会每帧都发送信息,他们只是会在每轮结束时发送信息(如 JSON),所以合理的延迟不是问题。我正在寻找不需要互联网的解决方案,我认为 WIFI 热点可以成为我用例的解决方案,但我不知道如何诚实。
    • 嘿@mahdi,我正在尝试做类似的事情。你是怎么解决的?
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多