我正在尝试使用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;
我在startServer
中使用componentDidMount
来启动服务器(就像我们使用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是什么? (是否所有设备都必须连接到同一互联网网络?)
答案 0 :(得分:0)
个人认为让手机托管游戏服务器不是一个好的设计选择。由于网络不稳定,将导致难以置信的等待时间和延迟。如果您在网络上,为什么不直接使用socketio调用外部服务器。
这真是个利基市场。我经过一番搜索后发现:“ React Native没有实现节点api,这就是为什么您不能使用http模块的原因。”来自janicduplessis,位于react-natives github页面上。我确实找到了一个包react-native-http-bridge,但我认为它不支持socketio。有趣的是,我之前曾考虑过在手机上运行服务器,并且有一些本机软件包可以为您做这件事(我认为它是使用WebSocket在android pad上托管POS系统)。但是整个过程有点像黑客。
我可以想象Android的10.0.2.2:port。关于IOS的IDK。并且您必须将其他人的电话连接到您的本地IP地址,例如192.168.1.06:port。它应该在您手机的网络设置中显示。有时您也必须使用该本地IP地址连接到自己的电话。除非我尝试,否则不确定。