Ошибка Socket.io 404
Я следовал учебнику Джеффри Уэй.
Руководство:
https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/1
это мой index.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
app.get('/', function(request, response){
response.sendFile(__dirname+'/index.html');
});
io.on('connection', function(socket){
console.log('A connection is made');
});
Некоторые люди говорят, что это версия и год. Код выше работает на 2014, я думаю.
Это мой HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"></meta>
<title>Chat Lesson</title>
</head>
<body>
<h1>Hello world!</h1>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
<script type="text/javascript">
var socket = io();
</script>
</body>
</html>
Я сделал много исследований. Некоторые люди говорят, что последовательность важна, но я нашел так много последовательности.
Моя ошибка:
GET http://chat-lesson.local:8888/socket.io/?EIO=3&transport=polling&t=1515636281477-74 404 (Not Found)
Мой вопрос:
Почему это 404 не найден? Я следовал руководству Джеффри Вей на каждом шагу, и оно было коротким, как 5-8 минут.
- Mamp Pro 4
- НПМ 3.10.10
Я пытался с помощью server.listen(8888);
events.js:160
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::8888
at Object.exports._errnoException (util.js:1022:11)
at exports._exceptionWithHostPort (util.js:1045:20)
at Server._listen2 (net.js:1259:14)
at listen (net.js:1295:10)
at Server.listen (net.js:1391:5)
at Object.<anonymous> (/Users/kendantinio/Documents/Freelancer/blvnp/chat-lesson/index.js:5:8)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
4 ответа
Попробуйте сделать этот код.
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res) {
res.sendfile('index.html');
});
users = [];
io.on('connection', function(socket) {
console.log('A user connected');
socket.on('setUsername', function(data) {
console.log(data);
if(users.indexOf(data) > -1) {
socket.emit('userExists', data + ' username is taken! Try some other username.');
} else {
users.push(data);
socket.emit('userSet', {username: data});
}
});
socket.on('msg', function(data) {
//Send message to everyone
io.sockets.emit('newmsg', data);
})
});
http.listen(3000, function() {
console.log('listening on localhost:3000');
});
Дайте мне знать, если это работает.
Я добавляю это, потому что это появляется первым в Google, и мне потребовалось 2 дня, чтобы найти решение.
Я использую Node.js и React, с socket.io-client
Я смог заставить его работать, передав URL-адрес и объект конфигурации в io
Пространство имен.
import io from 'socket.io-client'
const socket = io('http://localhost:3000', {
reconnectionDelay: 1000,
reconnection: true,
reconnectionAttemps: 10,
transports: ['websocket'],
agent: false,
upgrade: false,
rejectUnauthorized: false
});
Ваш сервер прослушивает порт 3000, но URL-адрес socket.io, который вы показываете, является портом 8888. Если у вас есть другой сервер, работающий на порту 8888 (возможно, ваш PHP-сервер), это не тот, который использует socket.io.
Чтобы точно понять, какое исправление необходимо, возникает вопрос о том, для какого URL страницы вы показываете HTML-код? Что показывает браузер в строке URL при отображении этой страницы? Ваш код node.js подразумевает, что вы намереваетесь загрузить эту страницу с сервера порта 3000 node.js, но показанный вами код клиента не будет загружать ее с порта 8888, если это так.
Я почти уверен, что код Марлона сработал, потому что http.listen
находится в конце index.js