#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);
});
Теперь вы будете создавать только один веб-сервер, запускать этот сервер и привязывать сокет.ввод-вывод на этот один сервер.