Почему Socket.io в моем React-Native Project работает только во время работы отладчика?

98
13

Я начинаю прямо сейчас с Socket.io в React-Native и сталкиваюсь с проблемой, что программа просто работает, когда отладчик работает в фоновом режиме, и поэтому он также работает с одним симулятором и если отладчик работает. Таким образом, React Simulator подключается к серверу только во время работы отладчика.

Код приложения React:

import React, {Component} from 'react';
import {Platform, Text, View} from 'react-native';
window.navigator.userAgent = 'react-native';
//import io from 'socket.io-client/dist/socket.io';
const io = require('socket.io-client/dist/socket.io');

import styles from './styles';

class App extends Component{
state = {
name: 'Bob'
}

constructor(){
super();

this.socket = io('localhost:3000', {jsonp: false});

this.socket.on('update', () => this.setState({name: 'Sonja'}));
}

render() {
return (
<View style={styles.container}>
<Text>{this.state.name}</Text>
</View>
);
}
}

export default App;

Код Сервера:

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

server.listen(3000);

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');
io.emit('update')
});
});

package.json:

{
"name": "TestSocket",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"express": "^4.16.4",
"react": "16.6.3",
"react-native": "0.57.8",
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.51.1",
"react-test-renderer": "16.6.3"
},
"jest": {
"preset": "react-native"
}
}

Так что, если отладчик работает в фоновом режиме, все работает нормально, но если я закрою удаленный отладчик или попробую код на 2 разных устройствах, он не будет работать или только для одного с запущенным отладчиком.

Заранее спасибо!

спросил(а) 2021-01-19T16:03:05+03:00 2 месяца, 3 недели назад
1
Решение
74

Socket.io 2.2.0 не работает с ReactNative (см. Https://github.com/socketio/socket.io-client/issues/1254)

Это работает только в отладчике, потому что при отладке JS запускается в Chrome, а не в контексте приложения ReactNative.

Решение => Вернуться к Socket.io 2.1.1

ответил(а) 2021-01-19T16:03:05+03:00 2 месяца, 3 недели назад
44

Понизьте RN до 0.57.x и попробуйте использовать socket.io-client 2.1.1 или 2.0.4.

ответил(а) 2021-01-19T16:03:05+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема