首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.io 404错误

Socket.io 404错误
EN

Stack Overflow用户
提问于 2018-01-11 02:06:40
回答 4查看 16.6K关注 0票数 5

我遵循了Jeffrey way的教程。

教程:

https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/1

这是我的index.js

代码语言:javascript
复制
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:

代码语言:javascript
复制
<!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>

我做了很多研究。有些人说这个序列很重要,但我发现了这么多序列。

我的错误:

代码语言:javascript
复制
GET http://chat-lesson.local:8888/socket.io/?EIO=3&transport=polling&t=1515636281477-74 404 (Not Found)

我的问题是:

为什么没有找到404?我在每一步都遵循了Jeffrey的教程,这个教程只有5-8分钟的时间。

  • Mamp Pro 4
  • 国家预防机制3.10.10

我试过用server.listen(8888);

代码语言:javascript
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-15 02:23:20

试着做这些代码。

代码语言:javascript
复制
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');
});

如果有用的话请告诉我。

票数 3
EN

Stack Overflow用户

发布于 2018-02-03 03:48:41

我增加这个原因是因为这首先出现在谷歌上,我花了两天时间才找到解决方案。

我用的是Node.js和React,用socket.io-client

我能够通过向io命名空间传递一个url和一个配置对象来使其工作。

代码语言:javascript
复制
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
});
票数 6
EN

Stack Overflow用户

发布于 2018-01-11 04:20:05

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

要确切地理解需要修复什么,这就引发了一个问题:显示HTML的页面的URL是什么?当您显示该页面时,浏览器在URL栏中显示什么?您的node.js代码意味着您打算从端口3000 node.js服务器加载该页面,但如果是这样的话,您显示的客户端代码将不会从端口8888加载它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48198835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档