在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器
Posted
技术标签:
【中文标题】在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器【英文标题】:cannot connect to socket.io server from React Native app when using expo on iPhone 【发布时间】:2022-01-16 02:49:00 【问题描述】:由于某种原因,我可以从浏览器连接到服务器,但不能从 iPhone 连接。有谁知道为什么?我感觉这与 SSL 证书有关,但我在网上找不到可行的解决方案。
服务器:
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, cors_allowed_origins="*")
@socketio.on('connect')
def handle_json(json):
print('CONNECTED')
if __name__ == '__main__':
socketio.run(app)
客户:
import StatusBar from 'expo-status-bar';
import React from 'react';
import Text, View from 'react-native';
import io from "socket.io-client";
var socket = io("http://127.0.0.1:5000/")
class App extends React.Component
render()
return (
<View>
<Text> test </Text>
<StatusBar style="auto" />
</View>
);
export default App
【问题讨论】:
尝试连接时出现的错误或警告是什么? 当我添加时,socket.on("connect_error", (err) => console.log("connect_error due to " + err.message););
我不断得到connect_error due to xhr poll error
这是一个使用 Node js 的例子。您可以尝试从服务器端socketIo(server, rejectUnauthorized: false, ...
进行配置,但如果这样做,您将容易受到 MITM 攻击
【参考方案1】:
服务器和 iPhone 在同一个网络中吗?如果不是,您的服务器的防火墙规则可能不允许请求。默认情况下,ios 不允许 http(不安全)请求。您必须更改您的 info.plist 文件,您必须添加 NSAppTransportSecurity 密钥。
【讨论】:
以上是关于在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器的主要内容,如果未能解决你的问题,请参考以下文章
expo项目,无法通过扫描二维码将项目加载到iPhone,如何解决?
无法在 Expo CLI 模拟器上运行 React Native App
无法将 babel-plugin-module-resolver 与 expo 和 react-native 一起使用