Socket.io 404 错误

Posted

技术标签:

【中文标题】Socket.io 404 错误【英文标题】:Socket.io 404 error 【发布时间】:2018-06-20 07:07:46 【问题描述】:

我已按照 Jeffrey Way 的教程进行操作。 教程: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?我在每一步都遵循 Jeffrey Way 的教程,教程只有 5-8 分钟。

Mamp Pro 4 NPM 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)

【问题讨论】:

您说的是您的 php 版本,但不要在其他地方提及 PHP。这是一个错误还是应该考虑的事情? @ZebMcCorkle 对此感到抱歉,我已经删除并更新了 PHP 所以您显然在 3 小时前就在这里,但对我在下面的回答只字未提。它是否向您显示出了什么问题?有问题吗? 仅供参考,您的问题是您遵循了cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js 的教程。那不是教程。那是一个 socket.io.js 文件。 @jfriend00 抱歉,我更新了我的描述,现在是正确的教程链接,谢谢! 【参考方案1】:

我添加这个是因为它首先出现在 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
);

【讨论】:

确定事情乔桑 告诉 socketio 客户端只使用 websocket 成功了 => transports: ['websocket']【参考方案2】:

您的服务器正在侦听端口 3000,但您显示的 socket.io URL 是端口 8888。如果您确实在端口 8888 上运行了其他服务器(可能是您的 PHP 服务器),那么运行 socket.io 的不是这个.

要准确了解需要进行什么修复,这就提出了一个问题,即您显示 HTML 的页面的 URL 是什么?当您显示该页面时,浏览器会在 URL 栏中显示什么?您的 node.js 代码暗示您打算从端口 3000 node.js 服务器加载该页面,但如果是这种情况,您显示的客户端代码不会从端口 8888 加载它。

【讨论】:

我更新了我的描述。我做了server.list(8888) 但显示错误 @Kenn - 应该是server.listen(8888)。而且,您没有回答我关于显示该页面时浏览器中的 URL 栏显示什么的问题?【参考方案3】:

尝试执行此代码。

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

让我知道它是否有效。

【讨论】:

对这段代码如何解决错误的解释会很方便:)【参考方案4】:

我几乎可以肯定 Marlon 的代码有效,因为 http.listen 在 index.js 的末尾

【讨论】:

在我发现的所有示例中,listen 始终是服务器上的最后一条指令,我不记得在哪里,但我想我在某处看到了“确保调用最后一个指令”。我想这是因为您在定义这些请求的方式之前告诉服务器开始侦听请求。但我不确定,从小就开始学习 Socket.io 和 Express。

以上是关于Socket.io 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Express.js 'socket.io/socket.io.js 404'

为啥我不断收到 Socket.io 轮询请求的 404 错误?

在 websockets 上 Express socket.io 错误 404

将 socket.io 与 Mean 集成时反复出现 404 错误

GET/socket io 未找到 404

获取 http://localhost:3000/socket.io/socket.io.js 404(未找到)