Сокет.ввод-вывод не найден на стороне клиента

#javascript #node.js #express #socket.io #node-modules

#javascript #node.js #выразить #socket.io #узлы-модули

Вопрос:

Это моя серверная часть:

 const path = require('path');
const http = require('http');
const express = require('express');

const socketio = require('socket.io');

const app = express();
 
const server = http.createServer(app);
const io = socketio(server);
const port = 3000 || process.env.PORT;

app.listen(port, () => {
console.log(`server running on port ${port}`);
});

io.on('connection', socket => {
console.log(socket);
});
  

Это моя клиентская сторона:

    <script src="/socket.io/socket.io.js"></script>
   <script>
   const socket = io();
   </script>
   </body>

   </html>
  

Я правильно переустановил все модули, но это не помогло.

Ответ №1:

Проблема в том, что вы создаете два веб-сервера, подключая сокет.ввод-вывод на один из них, но только запуск другого.

Обе эти строки кода создают новый веб-сервер:

 const server = http.createServer(app);
app.listen(port, ...);
  

Но на самом деле запускается только второй, и это НЕ тот сокет, к которому вы привязали сокет.io кому. Итак, к серверу вы привязали сокет.ввод-вывод никогда не запускается, поэтому ни один из клиентских компонентов, которые должны взаимодействовать с вашим сокетом.сервер ввода-вывода будет работать должным образом.


Чтобы исправить это, измените код вашего сервера на этот:

 const path = require('path');
const express = require('express');
const socketio = require('socket.io');

const app = express();
const port = 3000 || process.env.PORT;
const server = app.listen(port, () => {
    console.log(`server running on port ${port}`);
});

const io = socketio(server);

io.on('connection', socket => {
    console.log(socket);
});
  

Теперь вы будете создавать только один веб-сервер, запускать этот сервер и привязывать сокет.ввод-вывод на этот один сервер.