Я пытаюсь настроить связь между моим сервером nodeJS и приложением vueJS через socket.io. До сих пор мне удавалось наладить связь через сокет на моем основном компьютере. При запуске моего сервера узлов и моего приложения vue в режиме разработки я могу открыть приложение vue в браузере и увидеть соединение, проходящее через мой сервер.
Однако, когда я открываю приложение vueJS на своем iPad (подключенном к тому же Wi-Fi), приложение vue загружается и работает нормально, но мое соединение с сокетом никогда не проходит. Я также не могу подключиться к серверу сокетов, открыв приложение vueJS на ПК с другой сетью (также подключенном к тому же Wi-Fi, что и ПК, обслуживающий приложения), поэтому проблема здесь не в iPad.
Может ли быть что-то с моей локальной сетью, что блокирует соединение?
Я попытался настроить подключение к сокету с помощью простого клиента socket.io, vue-socketIO и vue-socketIO-extended, но у каждой библиотеки была одна и та же проблема. Вот мой код, использующий vue-socketIO-extended:
main.js
import VueSocketIOExt from 'vue-socket.io-extended';
import { io } from 'socket.io-client';
const socket = io('http://localhost:3000');
Vue.use(VueSocketIOExt, socket);
App.js
sockets: {
connect() {
// Fired when the socket connects.
console.info('connect')
},
disconnect() {
console.info('disconnect')
}
}
сервер.js
const app = require('express')();
const http = require('http').createServer(app);
const io = require('socket.io')(http, {
cors: {
origins: ['http://localhost:8080']
}
});
app.get('/', (req, res) => {
res.send('<h1>Hey Socket.io</h1>');
});
io.on('connection', (socket) => {
console.info('a user connected');
socket.on('disconnect', () => {
console.info('user disconnected');
});
socket.on('my message', (msg) => {
io.emit('my broadcast', `server: ${msg}`);
});
});
http.listen(3000, () => {
console.info('listening on *:3000');
});
Это связано с тем, что браузер пытается подключиться к серверу WS по адресу http://localhost:3000
, локальный хост разрешается в IP-адрес 127.0.0.1, который является петлевым адресом вашего устройства, на вашем iPad локальный хост — это iPad, и на 127.0.0.1:3000 ничего не работает. iPad.
Вам нужно использовать IP-адрес устройства, на котором работает ваш сервер, например: const socket = io('http://192.168.0.2:3000');