React native и socket.io node не работает
Ниже приведена ссылка на мой собственный компонент native и код node server.js, который я пытаюсь подключиться к моему серверу node websocket.
Мой код реагирования работает на том же компьютере, что и сервер. Я нашел здесь много разных ответов, и github, ни один из которых я не могу работать.
Я также нашел этот question, на который никогда не отвечали, и этот вопрос имеет ответ, который я не могу получить (просил более года назад)
Я нашел эту статью и попытался изменить мой код на основе этих рекомендаций, но это не сработало.
реагировать на код
import React from 'react';
import { StyleSheet, Text, View, Image } from 'react-native';
const io = require('socket.io-client/socket.io');
let socket = io('http://localhost:3000');
export default class App extends React.Component {
constructor(props) {
super(props);
console.log(socket);
}
render() {
return (
<View>
<Text>Websocket</Text>
</View>
);
}
}
server.js
const express = require('express');
const http = require('http')
const socketio = require('socket.io');
const app = express();
const server = http.Server(app);
const websocket = socketio(server);
server.listen(3000, () => console.log('listening on *:3000'));
console.log(websocket)
// The event will be called when a client is connected.
websocket.on('connection', (socket) => {
console.log('A client just joined on', socket.id);
});
Я использую следующие версии пакетов
"expo": "^16.0.0",
"react": "16.0.0-alpha.6",
"react-native": "^0.43.4",
"socket.io-client": "^1.7.3"
Ответы
Ответ 1
Я считаю, что это должно быть
const io = require('socket.io-client');
Что работает для меня.
Я помню, что сталкивался с такими проблемами при использовании реакции native. Многие учебники socket.io(в том числе и на их странице) предполагают, что вы используете более старый стиль импорта JS через теги script в HTML-документе. Похоже, что socket.io изменил пространство имен, поскольку я помню, что он был socket.io-client/socket.io
некоторое время назад, если память служит...
Ответ 2
Код сервера выглядит нормально. Хотя вы должны проверить, можете ли вы подключиться к его сокету через другого клиента.
В любом случае попробуйте это для ответа на собственный код.
Импорт:
import io from 'socket.io-client/socket.io'
В вашем компоненте выполните:
componentDidMount () {
const socket = io(YOURURL, {
transports: ['websocket']
})
socket.on('connect', () => {
console.log("socket connected")
socket.emit('YOUR EVENT TO SERVER', {})
socket.on('EVENT YOU WANNA LISTEN', (r) => {
})
})
socket.on('connect_error', (err) => {
console.log(err)
})
socket.on('disconnect', () => {
console.log("Disconnected Socket!")
})
}
Ответ 3
Спасибо, Питер. На мой взгляд, статья, которую вы нашли, не помогает, потому что вы пытаетесь подключиться к хосту, обслуживающему страницу.
В соответствии с примером на socket.io странице, убедитесь, что эта строка работает:
const io = require('socket.io-client/socket.io');
и подключиться без ссылки: let socket = io();
Это сработало для меня, но только в браузере на том же компьютере. Я думаю, что когда вы проверите на устройстве, вы должны указать свой IP вместо localhost.
Удачи:)