简体   繁体   中英

Socket.io 404 error

I have followed Jeffrey way's tutorial.
Tutorial:
https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/1

this is my 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'); 
});

Some people say its the version and year. The code above works on 2014 I think.

This is my 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>

I have done a lot of research. Some people say the sequence is important but I have found so many sequence.

My error:

GET http://chat-lesson.local:8888/socket.io/?EIO=3&transport=polling&t=1515636281477-74 404 (Not Found)

My question:
Why is it 404 not found? I have followed Jeffrey way's tutorial in every step and the tutorial was only short like 5-8mins.

  • Mamp Pro 4
  • NPM 3.10.10

I tried using 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)

Your server is listening on port 3000, but the socket.io URL you show is port 8888. If you do have some other server running on port 8888 (perhaps your PHP server), it's not this one that's running socket.io.

To understand exactly what fix is needed, this raises a question about what's the URL of the page you show the HTML for? What does the browser show in the URL bar when you display that page? Your node.js code implies you're intending to load that page from the port 3000 node.js server, but the client code you show would not be loading it from port 8888 if that's the case.

Try doing this code.

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');
});

Let me know if it works.

I'm adding this because this comes up first on Google and it took me 2 days to find a solution.

I'm using Node.js and React, with socket.io-client

I was able to make it work by passing a url and a configuration object to the io namespace.

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
});

我几乎可以肯定Marlon的代码能正常工作,因为http.listen位于index.js的末尾

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM